SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data signifie que le parser a lu avec succès une valeur JSON complète —— puis a trouvé encore du contenu non blanc derrière. JSON n’autorise qu’une seule valeur au niveau supérieur, donc tout ce qui suit est une erreur. Voici d’où vient ces « extra data » et comment corriger.
À quoi ressemble l’erreur
// Firefox
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data
at line 1 column 18 of the JSON data
// V8 (Chrome / Node / Edge)
SyntaxError: Unexpected non-whitespace character after JSON at position 17
SyntaxError: Unexpected token { in JSON at position 17 // formulation plus ancienne
// Python (analogue)
json.decoder.JSONDecodeError: Extra data: line 1 column 18 (char 17)La position pointe le premier caractère après la valeur valide —— c’est là que « l’extra » commence.
Pourquoi ça arrive
Cause 1 —— Deux valeurs JSON concaténées
// ❌ deux objets dos à dos —— valeur valide, puis encore
{"id":1}{"id":2}
// ^ position 8 : non blanc après JSON
// ✅ enveloppez-les dans un tableau
[{"id":1},{"id":2}]Cause 2 —— NDJSON / JSON Lines parsé d’un coup
Les fichiers de log et les APIs en streaming émettent souvent un objet JSON par ligne (NDJSON). JSON.parse() ne lit que la valeur de la première ligne, puis trébuche sur la suivante.
// ❌ JSON.parse sur le fichier entier
{"event":"login"}
{"event":"logout"}
// ✅ parsez ligne par ligne
const rows = text
.split('\n')
.filter(Boolean)
.map((line) => JSON.parse(line));Cause 3 —— Détritus en fin ou réponse dupliquée
// ❌ texte parasite, payload dupliqué ou point-virgule final
{"ok":true};
{"ok":true} // ligne de debug ajoutée par un proxy
extraJSON-RPC et autres flux à framing
Si vous consommez un protocole —— JSON-RPC sur stdio, le Language Server Protocol (LSP), le Debug Adapter Protocol —— plusieurs messages JSON circulent sur un seul canal par conception. Chacun porte une couche de framing qui dit combien fait le suivant, justement pour que vous n’essayiez pas de parser deux valeurs dans un même buffer :
Content-Length: 87\r\n
\r\n
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{...}}Content-Length: 42\r\n
\r\n
{"jsonrpc":"2.0","id":1,"result":{...}} La règle : lisez l’en-tête Content-Length, lisez exactement ce nombre d’octets, parsez une valeur JSON, recommencez. Si vous avalez tout le canal et parsez une fois, vous frappez « unexpected non-whitespace character after JSON data », car il contient plusieurs valeurs.
Pour NDJSON la règle équivalente est « split sur \n, parse chaque ligne ». Le fil commun : un flux de messages JSON exige toujours une couche de framing ; la concaténation brute n’est pas du JSON légal.
Comment corriger —— étape par étape
- Allez à la position signalée —— tout ce qui vient après est « l’extra ». Examinez ce qui suit immédiatement la première valeur complète.
- Plusieurs valeurs ? Si vous vouliez une liste, enveloppez-les dans un tableau
[ … ]séparées par des virgules. - NDJSON / JSON Lines ? Splittez par retour à la ligne et parsez chaque ligne séparément —— ne parsez pas le fichier entier d’un coup.
- Détritus en queue ? Retirez les caractères parasites (point-virgule, payload dupliqué, sortie de debug) avant le parsing.
- En streaming ? Vérifiez que vous ne concaténez pas plusieurs réponses dans un même buffer avant de parser.
Questions fréquentes
Que signifie « unexpected non-whitespace character after JSON data » ?
Le parser a lu une valeur JSON valide puis a trouvé du contenu en plus derrière. JSON ne permet qu’une seule valeur au niveau supérieur, donc les caractères qui suivent sont invalides.
Comment parser plusieurs objets JSON ?
S’ils sont concaténés, enveloppez-les dans un tableau. S’ils sont un par ligne (NDJSON / JSON Lines), splittez sur le saut de ligne et faites JSON.parse() sur chaque ligne individuellement.
Est-ce la même chose que « Unexpected end of JSON input » ?
Ce sont des opposés. Cette erreur signifie qu’il y a trop de données (en plus derrière une valeur complète) ; « Unexpected end of JSON input » signifie qu’il y en a trop peu (valeur coupée).
Corriger maintenant
- JSON Fix —— repérez les données en trop et nettoyez dans votre navigateur
- Unexpected End of JSON Input —— l’erreur opposée « pas assez de données »
- Comment corriger les erreurs « Unexpected Token » de JSON.parse —— toutes les variantes de token
- Corriger « [object Object] is not valid JSON » —— la référence complète des erreurs de syntaxe