Extra data: line L column C (char N)
json.loads hat einen vollständigen Wert geparst und danach weiteren Inhalt gefunden. Python nennt das Extra data. Ist die gemeldete Zeile 2 oder höher und sieht jede Zeile wie ein vollständiger Datensatz aus, ist die Datei JSON Lines und muss Zeile für Zeile gelesen werden.
Fügen Sie Ihr JSON ein und sehen Sie genau, wo es bricht
Nichts, was Sie einfügen, verlässt Ihren Browser. Die connect-src Erlaubnisliste macht daraus eine Garantie des Browsers statt eines Versprechens. Selbst überprüfen
Was es tatsächlich auslöst
Sortiert danach, wie oft sich das jeweilige als die Antwort herausstellt.
-
01 Die Datei ist JSON Lines
Ein JSON-Objekt pro Zeile, keine Kommas, kein umschließendes Array. Das Standardausgabeformat für Logs, BigQuery-Exporte und streamende APIs.
Geht kaputt
with open('events.jsonl') as f: data = json.load(f) # Extra data: line 2 column 1Funktioniert
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 wurde in einer Schleife aufgerufen und an dieselbe Datei angehängt
Jeder Aufruf schreibt ein vollständiges Dokument, sodass die Datei am Ende mehrere enthält. Entweder Sie schreiben absichtlich JSON Lines und lesen es auch so, oder Sie sammeln die Datensätze in einer Liste und schreiben sie einmal heraus.
Geht kaputt
for row in rows: f.write(json.dumps(row))Funktioniert
for row in rows: f.write(json.dumps(row) + '\n') # NDJSON, read line by line # or f.write(json.dumps(rows)) # one array -
03 Zwei aneinandergehängte Antworten
Ein Wiederholungsversuch, der an einen Puffer angehängt statt ihn ersetzt hat.
Derselbe Fehler in anderen Laufzeitumgebungen
Das zugrunde liegende Problem ist identisch; nur der Wortlaut unterscheidet sich. Meldet eine Kollegin eine dieser Zeilen, sieht sie genau dasselbe wie Sie.
| JavaScript (V8) | Unexpected non-whitespace character after JSON at position 8 (line 2 column 1) |
|---|
Häufige Fragen
- Gibt es eine Python-Funktion, die mehrere Dokumente aus einer Zeichenkette liest?
- json.JSONDecoder().raw_decode(s, idx) parst einen Wert und sagt Ihnen, wo er aufgehört hat, sodass Sie in einer Schleife weitermachen können. Bei zeilengetrennten Dateien ist das Aufteilen an Zeilenumbrüchen einfacher und viel schneller.
- Warum passt der char-Offset nicht zu meiner Zeile und Spalte?
- char ist der absolute Index in die Zeichenkette, während Zeile und Spalte die für Menschen lesbare Position sind. Beide beschreiben denselben Punkt.
Jetzt beheben
Fügen Sie das Payload in das Werkzeug oben ein, oder gehen Sie direkt zu dem, das für diesen Zweck gebaut wurde.
JSON Lines in ein Array umwandeln