Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro em json.loads

Boa tarde!

Ao executar a célula com o trecho de código abaixo, é apresentado o erro que segue. Pesquisei sobre ele, mas o json gerado anteriormente me pareceu correto.

Subi o json aqui: https://github.com/WilsonAssisDev/alura/blob/master/tweets.txt

Estou usando Python 3.8.3

Podem ajudar?

lista_arquivo = []

with open('tweets.txt', 'r') as arquivo:
    for linha in arquivo:
        lista_arquivo.append(json.loads(linha))

lista_arquivo[0]
---------------------------------------------------------------------------
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-37-8a2e7a4b7097> in <module>
      3 with open('tweets.txt', 'r') as arquivo:
      4     for linha in arquivo:
----> 5         lista_arquivo.append(json.loads(linha))
      6 
      7 lista_arquivo[0]

~\anaconda3\lib\json\__init__.py in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    355             parse_int is None and parse_float is None and
    356             parse_constant is None and object_pairs_hook is None and not kw):
--> 357         return _default_decoder.decode(s)
    358     if cls is None:
    359         cls = JSONDecoder

~\anaconda3\lib\json\decoder.py in decode(self, s, _w)
    335 
    336         """
--> 337         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    338         end = _w(s, end).end()
    339         if end != len(s):

~\anaconda3\lib\json\decoder.py in raw_decode(self, s, idx)
    351         """
    352         try:
--> 353             obj, end = self.scan_once(s, idx)
    354         except StopIteration as err:
    355             raise JSONDecodeError("Expecting value", s, err.value) from None

JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 1 (char 2)
2 respostas
solução!

Olá Wilson,

dando uma olhada no seu arquivo, pude notar que os tweets estão sendo armazenados formatados, isso está causando o problema para leitura.

O passo anterior, onde é gravado é criado o arquivo, deve ser escrito com cada tweet em uma linha, delimitado por '\n'. Exemplo:

{'tweet1':'exemplo', 'autor':'exemplo}
{'tweet2':'exemplo2', 'autor':'exemplo2}
{'tweet3':'exemplo3', 'autor':'exemplo3}

Qualquer coisa pode compartilhar a forma que você está usando para gravar o arquivo.

Perfeito, Julio. Obrigado!

Adicionalmente, gostaria de acrescentar uma situação que acabei de vivenciar, que pode causar problemas para outros alunos.

Quando eu tentei rodar os streamings com a lista de famosos, recebia um erro:

[63] user has been suspended

Inicialmente, achei que o meu usuário havia sido suspenso, mas, na realidade, foi o de um dos famosos (no caso, cleooficial).