Unexpected end of JSON input
L’analyseur a atteint la fin de l’entrée alors qu’il en attendait encore. Soit la chaîne était vide au départ, soit une valeur est restée ouverte et le document a été tronqué. Notez que ce message ne porte aucune position, et c’est précisément ce qui le distingue des erreurs qui en portent une.
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 La chaîne est vide
JSON.parse("") lève l’erreur immédiatement. Une chaîne vide n’est pas du JSON valide. Cela vient en général d’un HTTP 204, d’une réponse sans corps, ou d’une clé localStorage écrite comme chaîne vide.
Casse
JSON.parse(localStorage.getItem('draft'))Fonctionne
const raw = localStorage.getItem('draft'); const draft = raw ? JSON.parse(raw) : null; -
02 Le corps de la réponse a déjà été consommé
Le corps d’un Response ne peut être lu qu’une fois. Appeler res.text() puis res.json() sur la même réponse vous donne une chaîne vide la seconde fois.
Casse
const text = await res.text(); const data = await res.json(); // body already usedFonctionne
const text = await res.text(); const data = text ? JSON.parse(text) : null; -
03 Le document est tronqué
Une connexion coupée, une limite de taille de corps (Express est à 100 ko par défaut), une lecture de flux terminée trop tôt, ou un fichier écrit pendant sa lecture. Si l’entrée s’arrête au milieu d’un objet, notre validateur nomme chaque crochet resté ouvert et l’endroit où chacun a commencé.
Casse
{"users": [{"id": 1}, {"id":Fonctionne
{"users": [{"id": 1}, {"id": 2}]} -
04 Le cache npm ou yarn est corrompu
Une bonne part des recherches sur cette chaîne concernent npm et non du code applicatif. Un fichier de cache écrit partiellement produit la même erreur pendant l’installation. Lancez npm cache clean --force, supprimez node_modules et package-lock.json, puis réinstallez.
-
05 Vous avez analysé le résultat d’une fonction qui n’a rien renvoyé
JSON.parse(undefined) donne un autre message ("undefined" is not valid JSON), mais une fonction qui renvoie une chaîne vide plutôt qu’undefined atterrit ici.
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.
| Python | Expecting value: line 1 column 1 (char 0) |
|---|---|
| Python, truncated object | Expecting ',' delimiter: line 1 column 28 (char 27) |
Questions fréquentes
- Pourquoi n’y a-t-il ni ligne ni colonne dans ce message ?
- Parce qu’il n’y a aucune position à désigner. L’échec, c’est que l’entrée s’est terminée : l’endroit fautif est donc la fin du document. Notre validateur le signale comme fin d’entrée et liste les crochets encore ouverts.
- JSON.parse(null) lève-t-il cette erreur ?
- Non. JSON.parse(null) convertit null en la chaîne "null" et renvoie null, ce qui surprend. C’est la chaîne vide qui lève l’erreur.
Corrigez-le maintenant
Collez le payload dans l’outil ci-dessus, ou allez directement à celui conçu pour ce travail.
Trouver le crochet non fermé