Aller au contenu
jsonbeautifiers
Français
V8 Vérifié en exécutant l’analyseur sur Node v24.15.0, V8 13.6.233.17.

"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

Entrée

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.

  1. 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;
  2. 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());
  3. 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