Extra data: line L column C (char N)
json.loads a analysé une valeur complète puis a trouvé du contenu supplémentaire. Python appelle cela « extra data ». Si la ligne signalée est la 2 ou une suivante et que chaque ligne ressemble à un enregistrement complet, le fichier est du JSON Lines et doit être lu une ligne à la fois.
Collez votre JSON et voyez exactement où il casse
Rien de ce que vous collez ne quitte votre navigateur. La liste d’autorisation connect-src en fait une garantie du navigateur plutôt qu’une promesse. Vérifiez-le vous-même
Ce qui le provoque réellement
Classés selon la fréquence à laquelle chacun se révèle être la réponse.
-
01 Le fichier est du JSON Lines
Un objet JSON par ligne, sans virgules, sans tableau englobant. C’est le format de sortie standard des journaux, des exports BigQuery et des API en flux.
Casse
with open('events.jsonl') as f: data = json.load(f) # Extra data: line 2 column 1Fonctionne
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 a été appelé dans une boucle, en ajoutant au même fichier
Chaque appel écrit un document complet, si bien que le fichier finit par en contenir plusieurs. Soit vous écrivez du JSON Lines délibérément et le lisez comme tel, soit vous rassemblez les enregistrements dans une liste et faites un seul dump.
Casse
for row in rows: f.write(json.dumps(row))Fonctionne
for row in rows: f.write(json.dumps(row) + '\n') # NDJSON, read line by line # or f.write(json.dumps(rows)) # one array -
03 Deux réponses concaténées
Une nouvelle tentative qui a ajouté à un tampon au lieu de le remplacer.
La même erreur dans d’autres environnements
Le problème de fond est identique ; seule la formulation change. Si un collègue signale l’un de ces messages, il regarde exactement la même chose que vous.
| JavaScript (V8) | Unexpected non-whitespace character after JSON at position 8 (line 2 column 1) |
|---|
Questions fréquentes
- Existe-t-il une fonction Python qui lise plusieurs documents dans une même chaîne ?
- json.JSONDecoder().raw_decode(s, idx) analyse une valeur et vous indique où elle s’est arrêtée, ce qui permet de boucler. Pour des fichiers délimités par des lignes, découper sur les sauts de ligne est plus simple et bien plus rapide.
- Pourquoi le décalage char ne correspond-il pas à mes ligne et colonne ?
- char est l’indice absolu dans la chaîne, tandis que ligne et colonne donnent la position lisible par un humain. Les deux décrivent le même point.
Corrigez-le maintenant
Collez le payload dans l’outil ci-dessus, ou allez directement à celui conçu pour ce travail.
Convertir du JSON Lines en tableau