"undefined" is not valid JSON
Vous avez passé undefined à JSON.parse. Il est converti en la chaîne "undefined", et JSON n’a pas ce littéral : l’analyse échoue donc en position 0. La vraie question est de savoir d’où vient cet undefined, et il n’y a qu’environ trois réponses.
Vous pouvez aussi le voir écrit ainsi
- Unexpected token u in JSON at position 0
V8 a réécrit la plupart de ses messages d’erreur JSON en 2022. L’ancienne formulation reste ce que montrent la plupart des résultats de recherche, mais aucun runtime actuel ne l’émet.
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 Une clé de stockage jamais définie
localStorage.getItem renvoie null pour une clé absente, et JSON.parse(null) fonctionne en réalité. Mais si la chaîne "undefined" a été écrite un jour dans cette clé, la relire produit exactement cette erreur, définitivement, jusqu’à ce que la clé soit effacée.
Casse
localStorage.setItem('token', someUndefinedValue); // writes "undefined" JSON.parse(localStorage.getItem('token'));Fonctionne
const raw = localStorage.getItem('token'); const token = raw && raw !== 'undefined' ? JSON.parse(raw) : null; -
02 Une valeur asynchrone non attendue
Lire une propriété sur une promesse, ou sur un état pas encore chargé, donne undefined. L’analyse s’exécute avant l’arrivée des données.
Casse
const data = JSON.parse(fetchUser().body);Fonctionne
const res = await fetchUser(); const data = JSON.parse(await res.text()); -
03 Une propriété qui n’existe pas
Un champ renommé, une faute de frappe, ou une API dont la forme a changé. obj.data alors que le payload utilise obj.result donne undefined sans le moindre autre avertissement.
Questions fréquentes
- Pourquoi JSON.parse(null) fonctionne-t-il et pas JSON.parse(undefined) ?
- Les deux sont d’abord convertis en chaînes. null devient "null", qui est un document JSON valide : il s’analyse et renvoie null. undefined devient "undefined", et JSON n’a aucun littéral correspondant.
- Comment effacer une clé qui contient la chaîne "undefined" ?
- localStorage.removeItem(clé), ou protégez la lecture comme montré ci-dessus. La mauvaise valeur survit aux rechargements, et c’est pourquoi cette erreur paraît souvent intermittente d’une machine à l’autre.
Corrigez-le maintenant
Collez le payload dans l’outil ci-dessus, ou allez directement à celui conçu pour ce travail.
Valider un payload