Aide technique
Pourquoi JSON.parse dit-il "Unexpected token" ?
JSON.parse lève Unexpected token quand le texte n’est pas du JSON valide. Déboguer guillemets simples, virgules finales, réponses HTML et position d’erreur.
JSON.parse() lève un SyntaxError lorsque l’entrée n’est pas du JSON valide. « Unexpected token » signifie en général que le parseur a atteint un caractère non autorisé à cet endroit de la structure.
Causes fréquentes : guillemets simples, virgules finales, noms de propriété sans guillemets, mauvais échappement de chaîne, texte en trop autour du JSON, ou analyse d’HTML ou d’un autre corps non JSON comme du JSON.
Le libellé exact de l’erreur varie selon le moteur JavaScript et le navigateur. Ne supposez pas que chaque runtime affiche « Unexpected token X in JSON at position N ».
Ceci est le diagnostic Unexpected token de JSON.parse : ce que l’erreur signifie, comment lire la position, et que faire quand le corps est du HTML. Les virgules finales, les guillemets et Unexpected end sont couverts plus largement dans Erreurs JSON courantes : virgules finales, guillemets et Unexpected token.
Que signifie “Unexpected token” dans JSON.parse() ?
JSON.parse() exige la grammaire JSON. Un caractère illégal à la position courante lève SyntaxError. {“name”:“Alex”,} est invalide : après cette virgule l’objet ne peut pas se terminer. Le texte du message et la position varient encore selon le runtime.
Quelle erreur JSON.parse() lève-t-il ?
Le JSON invalide lève en général SyntaxError. Journalisez error.name pour confirmer le type. Ne figez pas error.message en entier : les moteurs et versions le formulent autrement.
try {
JSON.parse('{"name":"Alex",}');
} catch (error) {
console.log(error.name);
// SyntaxError
}
1. Utiliser des guillemets simples au lieu de doubles
{‘name’:‘Alex’} est du JSON invalide. {“name”:“Alex”} est valide. Les chaînes JSON et les noms de membres d’objet utilisent des guillemets doubles. Un littéral d’objet JavaScript tel que const user = { name: ‘Alex’ } peut être du JavaScript légal et n’être toujours pas du texte JSON.
Invalide
{'name':'Alex'}
Valide
{"name":"Alex"}
2. Virgules finales
Une virgule après la dernière propriété ou le dernier élément de tableau n’est pas du JSON standard valide. {“name”:“Alex”,“age”:30,} et [1, 2, 3,] échouent tous les deux. Traitez-le comme une cause d’Unexpected token ; Erreurs JSON courantes : virgules finales, guillemets et Unexpected token couvre les virgules finales plus en profondeur.
Invalide
{
"name": "Alex",
"age": 30,
}
Valide
{
"name": "Alex",
"age": 30
}
[1, 2, 3,]
3. Noms de propriété sans guillemets
{ name: “Alex” } peut être un littéral d’objet JavaScript. En JSON, les noms de membres sont des chaînes et exigent des guillemets doubles : {“name”:“Alex”}.
Invalide
{
name: "Alex"
}
Valide
{
"name": "Alex"
}
4. Échappement de chaîne invalide
Dans le texte JSON, une barre inverse commence un échappement. Un chemin brut comme C:\Users\Alex est invalide car \U n’est pas un échappement légal. Doublez les barres inverses. Ne mélangez pas l’échappement du langage hôte avec l’échappement JSON. Erreurs JSON courantes : virgules finales, guillemets et Unexpected token le couvre plus en profondeur.
Invalide
{"file":"C:\Users\Alex"}
Valide
{"file":"C:\\Users\\Alex"}
5. Texte en trop avant ou après le JSON
JSON.parse attend une seule valeur JSON. Un préfixe tel que Success: avant {“ok”:true}, ou un suffixe tel que done après, rend toute la chaîne invalide. Les espaces insignifiants autour d’une unique valeur JSON sont autorisés. JSON n’interdit pas les espaces avant ou après la valeur.
Success:
{"ok":true}
{"ok":true}
done
6. Analyser du HTML au lieu du JSON
Appeler response.json() sur une page HTML est un cas fréquent d’Unexpected token. Mauvais endpoints, pages HTML 404 ou 500, redirections de connexion, corps de proxy et pages de repli commencent souvent par du balisage. « Unexpected token < always means HTML » est trop fort : < est un indice, pas une preuve.
fetch('/api/data')
.then(response => response.json())
Que signifie le plus souvent “Unexpected token <” ?
Les valeurs JSON ne commencent en principe pas par <. Si le corps commence par ou , < peut être le premier caractère illégal. En débogage local, vérifiez le statut HTTP, Content-Type et le corps brut. Le libellé du moteur varie encore.
Vérifier la réponse avant de l’analyser
Le corps de fetch ne peut être consommé qu’une fois. En débogage local, lisez d’abord text(), inspectez un court préfixe, puis appliquez JSON.parse à cette même chaîne. N’appelez pas response.json() puis response.text() sur la même réponse. Ne journalisez pas par défaut des charges de production sensibles.
const response = await fetch(url);
const text = await response.text();
console.log(response.status);
console.log(response.headers.get("content-type"));
console.log(text.slice(0, 200));
try {
const data = JSON.parse(text);
console.log(data);
} catch (error) {
console.error("Invalid JSON:", error);
}
Que signifie “at position 123” ?
Certains moteurs indiquent une position, une ligne ou une colonne. Cherchez à proximité un guillemet, une virgule, une accolade ou un échappement incorrect. Cet index est l’endroit où l’analyse a remarqué un problème ; la vraie cause peut être plus tôt. Ce n’est pas garanti d’être le caractère fautif exact.
Unexpected token face à Unexpected end
Unexpected token signifie que le parseur a rencontré un caractère qu’il n’attendait pas. Unexpected end peut apparaître quand l’entrée s’arrête avant que la valeur soit complète, comme {“name”:“Alex” sans accolade fermante. Le libellé exact dépend du moteur. Erreurs JSON courantes : virgules finales, guillemets et Unexpected token couvre le JSON incomplet plus largement.
{"name":"Alex"
JSON n’est pas un littéral d’objet JavaScript
JSON est un format de données. Un littéral d’objet JavaScript est de la syntaxe JavaScript. L’objet JS avec des clés sans guillemets, des guillemets simples et une virgule finale n’est pas du texte JSON valide. JSON.parse ne peut pas analyser de façon sûre les littéraux d’objet JavaScript.
const data = {
name: 'Alex',
active: true,
};
{
"name": "Alex",
"active": true
}
Le JSON peut-il contenir des commentaires ?
Le JSON standard ne prend pas en charge les commentaires. Une ligne // dans un objet est invalide. JSON5 et des extensions similaires sont d’autres formats. Formater et comparer du JSON valide le JSON standard avec JSON.parse et ne traite pas JSON5 comme du JSON.
{
// user name
"name": "Alex"
}
undefined, NaN et Infinity sont-ils du JSON valide ?
Non. Les valeurs JSON sont objet, tableau, chaîne, nombre, true, false et null. undefined, NaN et Infinity ne le sont pas. Une valeur de premier niveau n’a pas à être un objet ou un tableau : true, 123, “hello” et null sont du JSON valide.
{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null
Corriger une erreur Unexpected token étape par étape
Travaillez la source, pas la chaîne d’erreur :
- Confirmez que l’entrée est bien du JSON, pas du HTML, des journaux ou du JavaScript.
- Inspectez les premiers caractères de l’entrée brute.
- Si elle vient d’une API, vérifiez le statut HTTP et Content-Type. Ni 200 ni application/json ne garantissent du JSON valide.
- Validez la syntaxe dans un parseur JSON.
- Utilisez toute position, ligne ou colonne indiquée comme un indice, pas comme la cause racine garantie.
- Vérifiez guillemets, virgules, accolades, crochets et échappements près de cette zone.
- Comparez avec une copie formatée et validée.
- Corrigez le sérialiseur ou l’endpoint. Ne supprimez pas le jeton indiqué au hasard.
Un remplacement global de ' par " peut casser les apostrophes dans les chaînes, le texte déjà échappé et les sources non JSON. Produisez du JSON valide depuis le vrai sérialiseur. Ne traitez pas eval comme un parseur JSON.
Utiliser JSON.stringify() pour produire du JSON en JavaScript
Préférez JSON.stringify à la concaténation manuelle de chaînes. Il émet du texte JSON valide pour les valeurs qu’il sérialise. Il ne conserve pas toute valeur JavaScript : undefined, les fonctions et les symboles ont un comportement particulier. Ce détail sort du cadre ici.
const data = {
name: "Alex",
active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}
JSON invalide face à une vraie correction
Ces paires ont été vérifiées avec JSON.parse. Pour le HTML, la correction est la réponse, pas une retouche de syntaxe.
| Problème | Invalide | Correction |
|---|---|---|
| Guillemets simples | {'a':1} |
{"a":1} |
| Virgule finale | {"a":1,} |
{"a":1} |
| Clé sans guillemets | {a:1} |
{"a":1} |
| undefined | {"a":undefined} |
{"a":null} |
| Corps HTML | <html>... |
Vérifiez l’endpoint et la réponse brute. N’éditez pas le HTML pour en faire du JSON. |
Un guide de décision simple pour Unexpected token
Si JSON.parse a échoué, décidez d’abord si vous avez même du JSON avant de réécrire les guillemets.
- JSON.parse a échoué
- D’une API ? Vérifiez le statut, Content-Type et le corps brut
- Commence-t-il comme du JSON ? Sinon, corrigez la source ou l’endpoint
- Si oui, validez guillemets, virgules, accolades, crochets, échappements, valeurs non prises en charge
- Utilisez la position indiquée comme indice
- Corrigez la source, puis analysez à nouveau
Valider le JSON avant de l’analyser ou de l’utiliser
NEXNARA Formater et comparer du JSON valide le JSON dans le navigateur avec JSON.parse—pas eval.
Valider, mettre en forme avec 2 espaces, 4 espaces ou tabulations, minifier, copier, télécharger et envoyer un .json. JSON Diff couvre les objets et tableaux imbriqués, les chemins, le résumé, les filtres et l’échange. Après analyse, les copies formatée et minifiée des mêmes données se comparent comme égales ; les clés d’objet se comparent par nom.
Un texte de plus de 5 MB peut sembler lent. Un texte de plus de 15 MB n’est pas traité dans le navigateur.
La validation et la mise en forme JSON se font dans votre navigateur. Cet outil n’envoie pas le JSON à un serveur NEXNARA. Les publicités et d’autres fonctions du site utilisent encore le réseau.
Collez la chaîne qui échoue dans Formater et comparer du JSON et lisez les premiers caractères avant de réécrire les guillemets.
FAQ
Pourquoi JSON.parse dit-il Unexpected token ?
Le texte n’est pas du JSON valide à l’endroit où le parseur s’est arrêté. Causes typiques : guillemets, virgules, texte en trop, ou un corps non JSON tel que du HTML.
Que signifie Unexpected token < in JSON ?
Le premier caractère illégal peut être <. Cela pointe souvent vers une page HTML, mais ce n’est pas une preuve d’un 404 ni de HTML dans tous les cas. Vérifiez le statut, Content-Type et le corps brut.
Comment trouver la position d’erreur dans du JSON ?
Si le moteur indique une position, une ligne ou une colonne, regardez à proximité. La vraie erreur peut être plus tôt. Servez-vous-en comme indice, puis validez.
Le JSON peut-il utiliser des guillemets simples ?
Non. En JSON standard, les chaînes et les noms de membres utilisent des guillemets doubles.
Le JSON peut-il avoir des virgules finales ?
Non. Le JSON standard n’autorise pas une virgule après la dernière propriété ou le dernier élément de tableau.
Comment vérifier si une chaîne est du JSON valide ?
Appelez JSON.parse dans un try/catch, ou collez le texte dans Formater et comparer du JSON. Si l’analyse lève SyntaxError, la chaîne n’est pas du JSON valide.