Résoudre "Unexpected token in JSON" et les erreurs d'analyse JSON courantes : Un guide complet
Le JSON (JavaScript Object Notation) est la pierre angulaire de la communication Web moderne. Que vous construisiez une API REST, configuriez un serveur ou stockiez l'état d'une application, le JSON est partout. Cependant, sa syntaxe stricte entraîne souvent des erreurs frustrantes comme SyntaxError: Unexpected token, JSON.parse: unexpected character ou simplement invalid JSON format.
Dans ce guide, nous allons décomposer les erreurs d'analyse JSON les plus courantes, expliquer pourquoi elles se produisent et vous montrer exactement comment les corriger.
1. Messages d'erreur JSON courants
Lorsqu'un analyseur (comme JSON.parse() en JavaScript) rencontre un JSON non valide, il renvoie une erreur. Selon l'environnement, vous pourriez voir :
- Navigateur (Chrome/V8) :
SyntaxError: Unexpected token ' in JSON at position 0 - Firefox :
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data - Node.js :
SyntaxError: Unexpected token ... in JSON at position ... - Python :
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes
L'information clé est généralement le caractère qu'il n'attendait pas et la position (ou ligne/colonne) où cela s'est produit.
2. Principales causes et solutions
2.1 Guillemets simples au lieu de guillemets doubles
Le JSON exige strictement des guillemets doubles (") pour les clés et les valeurs de chaîne. Les guillemets simples (') sont valides dans les objets JavaScript mais non valides dans les chaînes JSON.
L'erreur (single quotes in JSON) :
{
'name': 'Tool3M'
}
La solution : Remplacez tous les guillemets simples par des guillemets doubles.
{
"name": "Tool3M"
}
2.2 Virgules de fin (Trailing Commas)
Contrairement au JavaScript moderne, le JSON n'autorise pas de virgule après le dernier élément d'un objet ou d'un tableau.
L'erreur (trailing comma in JSON) :
{
"id": 1,
"status": "active",
}
La solution : Supprimez la virgule après la dernière propriété.
{
"id": 1,
"status": "active"
}
2.3 Clés sans guillemets
En JSON, les clés doivent toujours être des chaînes de caractères entourées de guillemets doubles.
L'erreur :
{
id: 123
}
La solution : Entourez les clés de guillemets doubles.
{
"id": 123
}
2.4 Commentaires en JSON
Le standard JSON ne supporte pas les commentaires (// ou /* */) (comments in JSON). Bien que certains outils (comme VS Code pour tsconfig.json) les autorisent, le JSON.parse() standard échouera.
L'erreur :
{
"id": 1 // Ceci est un commentaire
}
La solution :
Supprimez tous les commentaires avant l'analyse. Si vous devez avoir des métadonnées, utilisez une propriété comme "__comment": "texte".
2.5 Valeurs spéciales : NaN, Infinity et Undefined
Le JSON ne supporte pas NaN, Infinity, -Infinity ou undefined. Ce sont des valeurs spécifiques à JavaScript.
L'erreur (NaN in JSON, Infinity in JSON) :
{
"value": NaN,
"expired": undefined
}
La solution :
Utilisez null ou une chaîne/un nombre de remplacement à la place.
{
"value": null,
"expired": null
}
2.6 Caractères de contrôle et sauts de ligne
Les chaînes de caractères en JSON ne peuvent pas contenir de caractères de contrôle bruts (comme des tabulations ou des sauts de ligne réels) à moins qu'ils ne soient échappés.
L'erreur :
{
"description": "Ceci est une
chaîne multi-lignes"
}
La solution :
Utilisez \n pour les sauts de ligne et \t pour les tabulations.
{
"description": "Ceci est une \nchaîne multi-lignes"
}
3. Dépannage avancé
3.1 BOM (Byte Order Mark)
Parfois, un fichier semble parfait mais renvoie toujours une SyntaxError à la position 0. Cela est souvent causé par un caractère UTF-8 BOM caché au début du fichier.
Solution : Réenregistrez le fichier en "UTF-8 sans BOM".
3.2 Caractères mal échappés
Si votre chaîne contient une barre oblique inverse (\) ou un guillemet double ("), ils doivent être échappés.
- Correct :
"path": "C:\\Windows\\System32" - Correct :
"quote": "Il a dit \"Bonjour\""
4. Mesures de prévention
- Utilisez un Linter : Utilisez des outils comme ESLint avec le
jsonc-parserou la validation JSON intégrée de VS Code. - Formatage automatique : Passez toujours votre JSON par un formateur avant de l'enregistrer dans un fichier de config.
- Validation de schéma : Utilisez JSON Schema pour définir la structure de vos données et les valider par programmation.
- Try-Catch : Lors de l'analyse de données dynamiques, enveloppez toujours
JSON.parse()dans un bloctry...catchpour gérer les erreurs avec élégance.
try {
const data = JSON.parse(userInput);
} catch (e) {
console.error("Échec de l'analyse du JSON :", e.message);
// Afficher une erreur conviviale à l'utilisateur
}
5. FAQ : Questions fréquemment posées
Q : Pourquoi est-ce que je reçois "Unexpected token < in JSON at position 0" ?
A : Cela signifie presque toujours que votre code attendait du JSON mais a reçu du HTML. Cela se produit généralement lorsqu'un appel d'API échoue et que le serveur renvoie une page d'erreur HTML (comme une page 404 ou 500) au lieu de la réponse JSON attendue.
Q : Puis-je utiliser des nombres hexadécimaux en JSON ?
A : Non. Le JSON ne supporte que les nombres décimaux standard. 0xFF provoquera une erreur d'analyse (JSON parse error). Utilisez 255 à la place.
Q : Comment gérer les gros fichiers JSON qui font planter mon analyseur ?
A : Pour les fichiers très volumineux, utilisez un analyseur en "streaming" comme JSONStream (Node.js) ou ijson (Python), qui traite le fichier morceau par morceau au lieu de tout charger en mémoire.
6. Outil de vérification rapide
Si vous avez du mal à trouver cette virgule manquante ou ce guillemet mal placé, utilisez notre Formateur et Validateur JSON. Il permettra de :
- Mettre instantanément en évidence les erreurs de syntaxe.
- Corriger les problèmes courants comme les guillemets simples ou les virgules de fin.
- Formater votre JSON pour le rendre lisible par l'homme.
Erreurs liées
- Résoudre les erreurs 'invalid base64 string'
- Comment corriger 'malformed URL' en JavaScript
- Comprendre les erreurs d'indentation YAML