Extra data: line L column C (char N)
O json.loads parseou um valor completo e depois encontrou mais conteúdo. O Python chama isso de extra data. Se a linha reportada é a 2 ou posterior e cada linha parece um registro completo, o arquivo é JSON Lines e precisa ser lido uma linha por vez.
Cole o seu JSON e veja exatamente onde ele quebra
Nada do que você cola sai do seu navegador. A lista de permissões connect-src transforma isso em uma garantia do navegador, e não em uma promessa. Confira você mesmo
O que realmente causa isso
Ordenados por quantas vezes cada um acaba sendo a resposta.
-
01 O arquivo é JSON Lines
Um objeto JSON por linha, sem vírgulas, sem array envolvendo. É o formato de saída padrão de logs, exportações do BigQuery e APIs em streaming.
Quebra
with open('events.jsonl') as f: data = json.load(f) # Extra data: line 2 column 1Funciona
with open('events.jsonl') as f: data = [json.loads(line) for line in f if line.strip()] # or, with pandas import pandas as pd df = pd.read_json('events.jsonl', lines=True) -
02 json.dumps foi chamado dentro de um laço, acrescentando ao mesmo arquivo
Cada chamada escreve um documento completo, então o arquivo acaba guardando vários. Ou você escreve JSON Lines de propósito e lê como tal, ou junta os registros em uma lista e faz um dump só.
Quebra
for row in rows: f.write(json.dumps(row))Funciona
for row in rows: f.write(json.dumps(row) + '\n') # NDJSON, read line by line # or f.write(json.dumps(rows)) # one array -
03 Duas respostas concatenadas
Uma nova tentativa que acrescentou a um buffer em vez de substituí-lo.
O mesmo erro em outros runtimes
O problema de fundo é idêntico; só muda a redação. Se um colega reportar uma dessas mensagens, ele está olhando exatamente para a mesma coisa que você.
| JavaScript (V8) | Unexpected non-whitespace character after JSON at position 8 (line 2 column 1) |
|---|
Perguntas frequentes
- Existe alguma função do Python que leia vários documentos de uma mesma string?
- json.JSONDecoder().raw_decode(s, idx) parseia um valor e te diz onde parou, então dá para iterar. Para arquivos delimitados por linhas, separar pelas quebras de linha é mais simples e bem mais rápido.
- Por que o deslocamento char não bate com a minha linha e coluna?
- char é o índice absoluto dentro da string, enquanto linha e coluna são a posição legível por gente. Os dois descrevem o mesmo ponto.
Conserte agora
Cole o payload na ferramenta acima, ou vá direto para a que foi feita para este trabalho.
Converter JSON Lines em um array