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

Bad control character in string literal in JSON at position N (line L column C)

Une chaîne de votre document contient un caractère de contrôle littéral : le plus souvent un vrai saut de ligne, parfois une tabulation. Les chaînes JSON ne peuvent pas contenir de caractères sous U+0020 sans échappement. Un saut de ligne doit s’écrire \n, une tabulation \t. La position désigne le caractère fautif.

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 Du texte multiligne collé directement dans une chaîne

    Du SQL, du HTML, un extrait de journal ou un message d’erreur contenant de vrais sauts de ligne. Pour l’analyseur, le saut de ligne met fin à la chaîne.

    Casse

    {
      "query": "SELECT *
    FROM users"
    }

    Fonctionne

    {
      "query": "SELECT *\nFROM users"
    }
  2. 02 Du JSON construit par concaténation de chaînes

    C’est la cause profonde de presque tous les cas. Le JSON assemblé à la main n’échappe pas les valeurs que vous y interpolez. Sérialisez plutôt l’objet et le problème ne peut plus se produire.

    Casse

    const body = '{"note": "' + note + '"}';

    Fonctionne

    const body = JSON.stringify({ note });
  3. 03 Une tabulation venue d’un copier-coller

    Les tabulations sont invisibles et se glissent facilement dans les chaînes quand on copie depuis un tableur ou un terminal. Échappez-les en \t, ou retirez-les avant de construire le document.

  4. 04 Des fins de ligne Windows à l’intérieur d’une valeur

    Un retour chariot, U+000D, est lui aussi un caractère de contrôle. Du texte lu depuis un fichier Windows et intégré dans une chaîne transporte \r en plus de \n.

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 Invalid control character at: line 1 column 8 (char 7)
Java (Jackson) Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value

Questions fréquentes

Quels caractères doivent être échappés ?
Tout ce qui va de U+0000 à U+001F, plus le guillemet double et l’antislash. JSON définit des échappements courts pour le retour arrière, le saut de page, le saut de ligne, le retour chariot et la tabulation ; tout le reste de cette plage exige la forme \u, par exemple \u0000.
Puis-je faire accepter ces caractères par l’analyseur ?
Jackson dispose de ALLOW_UNESCAPED_CONTROL_CHARS et certains analyseurs ont des options similaires, mais cela masque le problème au lieu de le corriger, et le document reste invalide pour tous les autres consommateurs. Échappez à l’endroit où le JSON est produit.

Corrigez-le maintenant

Collez le payload dans l’outil ci-dessus, ou allez directement à celui conçu pour ce travail.

Le réparer automatiquement