Les erreurs JSON, expliquées
Chaque page ici prend un message d’erreur exact et répond à trois questions : de quoi l’analyseur se plaignait réellement, ce qui le provoque dans du vrai code par ordre de fréquence, et quoi changer. Chacune intègre le validateur, pour que vous puissiez réparer votre payload sans quitter la page.
Les messages sont mesurés et non mémorisés. Toute chaîne V8 et Python de ce site provient de l’exécution de l’analyseur. Les chaînes de Firefox et Safari sont délibérément absentes, parce que nous n’avons pas pu les exécuter et les vérifier, et publier une supposition sur un message d’erreur, sur un site dont tout l’argument est l’exactitude, serait un mauvais marché.
Ou collez simplement le payload
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
JavaScript, Node et Chrome
Mesuré sur Node v24.15.0 avec V8 13.6.233.17. V8 a réécrit presque tous ces messages en 2022, donc chaque page porte à la fois la formulation actuelle et celle que vous trouverez dans les vieilles réponses.
-
Unexpected token '<', "<!DOCTYPE "... is not valid JSONLe serveur a renvoyé une page d’erreur , et 4 autres causes. -
Unexpected end of JSON inputLa chaîne est vide , et 4 autres causes. -
"[object Object]" is not valid JSONLa valeur était déjà analysée , et 2 autres causes. -
"undefined" is not valid JSONUne clé de stockage jamais définie , et 2 autres causes. -
Unexpected non-whitespace character after JSON at position N (line L column C)L’entrée est du NDJSON ou du JSON Lines , et 3 autres causes. -
Bad control character in string literal in JSON at position N (line L column C)Du texte multiligne collé directement dans une chaîne , et 3 autres causes. -
Bad escaped character in JSON at position N (line L column C)Un chemin de fichier Windows avec des antislashs simples , et 3 autres causes. -
Expected double-quoted property name in JSON at position N (line L column C)Une virgule finale avant l’accolade fermante , et 2 autres causes. -
Expected property name or '}' in JSON at position N (line L column C)Des clés entre apostrophes, venues d’un dict Python affiché avec str() , et 3 autres causes. -
Expected ',' or '}' after property value in JSON at position N (line L column C)Une virgule manquante entre deux propriétés , et 3 autres causes. -
Unterminated string in JSON at position N (line L column C)Un guillemet double non échappé à l’intérieur de la valeur , et 3 autres causes.
Python
Mesuré sur CPython 3.14.3. Deux de ces messages sont nouveaux dans Python 3.13, donc la version compte et chaque page dit laquelle.
-
Expecting value: line 1 column 1 (char 0)Le corps de la réponse est du HTML, pas du JSON , et 3 autres causes. -
Extra data: line L column C (char N)Le fichier est du JSON Lines , et 2 autres causes. -
Expecting ',' delimiter: line L column C (char N)Un guillemet double non échappé dans une chaîne , et 3 autres causes. -
Expecting property name enclosed in double quotes: line L column C (char N)Un dict Python affiché plutôt que sérialisé , et 2 autres causes. -
Invalid control character at: line L column C (char N)Du texte multiligne dans une chaîne , et 2 autres causes. -
Invalid \escape: line L column C (char N)Un chemin Windows , et 2 autres causes. -
Unterminated string starting at: line L column C (char N)Un guillemet non échappé dans la valeur , et 2 autres causes.
PHP
PHP échoue silencieusement par défaut, et c’est là le vrai problème. La page explique comment lui arracher un vrai message.
C# et .NET
Newtonsoft.Json et System.Text.Json formulent le même échec différemment.
Java
Jackson, c’est-à-dire ce que presque tout l’écosystème JVM utilise en dessous.
Les quatre fautes derrière la plupart de ces messages
Retirez la formulation et presque tous les messages de cette page viennent de l’une de quatre choses.
- Ce n’est pas du JSON du tout
- Une page d’erreur HTML, un corps vide, un message en texte brut. L’analyseur a raison et c’est la requête qui a tort. Vérifiez le code de statut et le Content-Type avant de vérifier le corps.
- C’est du JavaScript ou du Python, pas du JSON
- Apostrophes, clés sans guillemets, virgules finales, True et None. Presque toujours un dictionnaire ou un littéral d’objet imprimé au lieu d’être sérialisé. La réparation corrige tout cela.
- Une chaîne a été construite par concaténation
- Ce qui veut dire que les valeurs n’ont jamais été échappées : un guillemet ou un saut de ligne dans l’une d’elles casse le document. Sérialiser à la place rend cette classe de bugs impossible.
- Ce sont plusieurs documents, pas un seul
- Du NDJSON lu comme une valeur unique. Lisez-le ligne par ligne ou enveloppez les enregistrements dans un tableau.