Extra data: line L column C (char N)
json.loads ha analizzato un valore completo e poi ha trovato altro contenuto. Python lo chiama extra data. Se la riga segnalata è la 2 o una successiva e ogni riga sembra un record completo, il file è JSON Lines e va letto una riga alla volta.
Incolla il tuo JSON e vedi esattamente dove si rompe
Nulla di ciò che incolli lascia il tuo browser. L’allowlist connect-src ne fa una garanzia del browser anziché una promessa. Verificalo tu stesso
Che cosa lo provoca davvero
In ordine di quanto spesso ciascuno si rivela essere la risposta.
-
01 Il file è JSON Lines
Un oggetto JSON per riga, senza virgole, senza array che li racchiude. È il formato di output standard di log, esportazioni BigQuery e API in streaming.
Si rompe
with open('events.jsonl') as f: data = json.load(f) # Extra data: line 2 column 1Funziona
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 è stato chiamato in un ciclo, accodando allo stesso file
Ogni chiamata scrive un documento completo, quindi il file finisce per contenerne parecchi. O scrivi JSON Lines di proposito e lo leggi come tale, oppure raccogli i record in una lista e fai un solo dump.
Si rompe
for row in rows: f.write(json.dumps(row))Funziona
for row in rows: f.write(json.dumps(row) + '\n') # NDJSON, read line by line # or f.write(json.dumps(rows)) # one array -
03 Due risposte concatenate
Un nuovo tentativo che ha accodato a un buffer invece di sostituirlo.
Lo stesso errore in altri runtime
Il problema di fondo è identico; cambia solo la formulazione. Se un collega segnala uno di questi messaggi, sta guardando esattamente la stessa cosa che vedi tu.
| JavaScript (V8) | Unexpected non-whitespace character after JSON at position 8 (line 2 column 1) |
|---|
Domande frequenti
- Esiste una funzione Python che legga più documenti dalla stessa stringa?
- json.JSONDecoder().raw_decode(s, idx) analizza un valore e ti dice dove si è fermato, così puoi ciclare. Per file delimitati da righe, spezzare sugli a capo è più semplice e molto più veloce.
- Perché l’offset char non corrisponde alla mia riga e colonna?
- char è l’indice assoluto nella stringa, mentre riga e colonna sono la posizione leggibile da una persona. Descrivono lo stesso punto.
Risolvilo adesso
Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.
Converti JSON Lines in un array