SyntaxError: Unterminated string in JSON at position N signifie que le parser a commencé à lire une chaîne (a vu un " d’ouverture) et a atteint la fin de l’entrée —— ou un saut de ligne —— avant de trouver le " de fermeture. La chaîne n’a jamais été refermée. Voici pourquoi et comment corriger.
Quelle erreur de chaîne est-ce que je vois ?
- Unterminated string —— une chaîne a été ouverte avec
"mais jamais refermée. - Bad control character —— une tabulation/un retour à la ligne/un octet null brut se trouve à l’intérieur d’une chaîne, sans échappement.
- Bad escaped character —— un
\est suivi de quelque chose que JSON n’autorise pas (par ex.\x, chemins Windows).
À quoi ressemble l’erreur
// V8 (Chrome / Node / Edge)
SyntaxError: Unterminated string in JSON at position 27
// Firefox
SyntaxError: JSON.parse: unterminated string at line 2 column 10 of the JSON data
// Safari
SyntaxError: JSON Parse error: Unterminated stringLa position désigne (ou juste après) le guillemet d’ouverture de la chaîne jamais refermée —— avancez à partir de là.
Pourquoi ça arrive
Cause 1 —— Un guillemet non échappé referme la chaîne trop tôt
Un " littéral dans la valeur referme la chaîne prématurément ; le reste de la ligne est lu comme des tokens inattendus, et la vraie chaîne reste « ouverte ».
// ❌ cassé —— le guillemet avant hello referme "He said "
{ "note": "He said "hello" to her" }
// ✅ corrigé —— échappez les guillemets internes avec un antislash
{ "note": "He said \"hello\" to her" }Cause 2 —— Un saut de ligne brut dans la chaîne
Les chaînes JSON ne peuvent pas enjamber un saut de ligne brut. Un saut littéral termine la chaîne et la laisse non refermée.
// ❌ cassé —— vrai saut de ligne dans la chaîne
{ "bio": "line one
line two" }
// ✅ corrigé —— utilisez l’échappement \n, pas de saut brut
{ "bio": "line one\nline two" }Cause 3 —— Données tronquées
Une réponse coupée en plein milieu d’une chaîne (connexion perdue, limite de buffer/taille, lecture partielle) laisse une chaîne ouverte à la fin de l’entrée.
// ce qui est arrivé (connexion coupée) :
{"user":{"name":"Ada Lovel
// → Unterminated stringComment corriger —— étape par étape
- Allez à la position signalée et trouvez le
"d’ouverture sans fermeture correspondante. - Cherchez un
"non échappé dans la valeur —— échappez-le en\". - Cherchez un saut de ligne/tab brut dans la valeur —— remplacez-le par
\n/\t. - Vérifiez la troncature —— comparez la longueur en octets à
Content-Length; si elle est plus courte, les données ont été coupées (correction code, pas correction texte). - Arrêtez de bâtir du JSON à la main. Utilisez
JSON.stringify(), qui échappe les guillemets et les caractères de contrôle pour vous.
// Prévention : ne concaténez jamais des chaînes pour faire du JSON
const json = JSON.stringify({ note: userInput }); // toujours valideQuestions fréquentes
Qu’est-ce qui cause « Unterminated string in JSON » ?
Un " d’ouverture sans " de fermeture correspondante —— le plus souvent un guillemet non échappé dans la valeur, un saut de ligne brut, ou une réponse coupée en pleine chaîne.
Comment inclure un guillemet ou un saut de ligne dans une chaîne JSON ?
Échappez-les : \" pour un guillemet double, \n pour un saut de ligne, \t pour une tabulation. Construire le JSON avec JSON.stringify() le fait automatiquement.
Est-ce la même chose que « Unexpected end of JSON input » ?
Liés mais distincts. « Unterminated string » signifie qu’une chaîne est ouverte ; « Unexpected end of JSON input » signifie que toute la structure (objet/tableau) s’est terminée trop tôt. Les réponses tronquées peuvent déclencher l’une ou l’autre.
Corriger maintenant
- JSON Fix —— repérer la chaîne non terminée et la réparer dans votre navigateur
- Unexpected End of JSON Input —— quand toute la structure est coupée
- Bad Control Character dans un littéral de chaîne en JSON —— tabulations/sauts de ligne bruts dans les chaînes
- Bad Escaped Character en JSON —— échappements antislash invalides