Comment formater un JSON en ligne ?
Collez votre JSON dans la zone de saisie, choisissez Formater ou Minifier et, si besoin, l'indentation et le tri des clés : le résultat apparaît en dessous, prêt à copier. Si le texte contient une erreur, l'outil affiche la ligne, la colonne et un extrait avec un repère sous le caractère fautif.
Formater ne change pas les données. La spécification JSON (RFC 8259) autorise des espaces, tabulations et retours à la ligne autour des six caractères de structure, les accolades, les crochets, les deux-points et la virgule : indenter consiste à en ajouter, minifier à les retirer. L'outil recopie les chaînes et les nombres exactement comme vous les avez écrits. C'est utile pour les grands identifiants : un programme JavaScript qui lit 12345678901234567890 avec JSON.parse le réécrit 12345678901234567000, car ses nombres ne représentent les entiers exactement que jusqu'à 9 007 199 254 740 991. La RFC 8259 précise d'ailleurs que les entiers compris entre -(2^53)+1 et (2^53)-1 sont interopérables : tous les logiciels s'accordent sur leur valeur exacte.
Quelle est la syntaxe d'un JSON valide ?
Un document JSON contient une seule valeur, qui peut être un objet, un tableau, une chaîne, un nombre, ou l'un des trois mots true, false et null. La RFC 8259 n'exige pas que cette valeur racine soit un objet ou un tableau, comme le faisaient d'anciennes spécifications : 42 ou "bonjour" sont des documents JSON valides. Les règles essentielles :
- Un objet s'écrit entre accolades, avec des paires nom/valeur séparées par des virgules ; chaque nom est une chaîne entre guillemets doubles, suivie de deux-points.
- Un tableau s'écrit entre crochets, avec des valeurs séparées par des virgules. Aucune virgule n'est permise après le dernier élément.
- Les chaînes s'écrivent entre guillemets doubles. Le guillemet, la barre oblique inverse et les caractères de contrôle (dont le retour à la ligne et la tabulation) doivent être échappés : \" \\ \n \t, ou \u suivi de quatre chiffres hexadécimaux.
- Les nombres s'écrivent en base 10, avec un point décimal : pas de zéro initial (07), pas de signe + devant, pas de notation hexadécimale, et ni NaN ni Infinity.
- true, false et null s'écrivent en minuscules.
- Entre les éléments, seuls l'espace, la tabulation, le retour à la ligne et le retour chariot sont permis. La grammaire ne prévoit aucun commentaire.
- Les noms d'un même objet devraient être uniques : la RFC prévient qu'en cas de doublon, le comportement des logiciels qui lisent le fichier est imprévisible.
Exemple : formater, minifier et trier les clés
Le JSON d'exemple chargé dans l'outil décrit un carnet de recettes : l'outil y compte 2 objets, 2 tableaux, 9 clés et 3 niveaux d'imbrication. Le tri des clés ne change que l'ordre des membres dans chaque objet, à tous les niveaux. Le texte {"b":1,"a":[true,null]} devient {"a":[true,null],"b":1} : toujours 23 caractères, et 45 une fois indenté avec deux espaces. Comme un objet JSON est une collection non ordonnée, le sens des données ne change pas ; le tri sert surtout à comparer deux versions d'un même fichier. Il suit l'ordre des codes de caractères : les majuscules passent avant les minuscules, et les lettres accentuées après le z.
Minifié, le JSON d'exemple tient en une ligne de 170 caractères. Voici sa taille selon le format choisi :
| Format | Caractères | Lignes |
|---|---|---|
| Minifié | 170 | 1 |
| Tabulation | 220 | 17 |
| 2 espaces | 245 | 17 |
| 4 espaces | 295 | 17 |
Erreurs JSON fréquentes : comment les corriger ?
Les erreurs viennent souvent d'un texte copié depuis du code JavaScript, un traitement de texte ou un fichier de configuration qui tolère plus de choses que JSON. Le tableau ci-dessous montre des cas courants et leur correction.
L'analyseur signale l'erreur à l'endroit où le texte devient impossible à lire, ce qui n'est pas toujours là où se trouve la faute. Dans un objet sur cinq lignes dont la troisième vaut "tags": ["pain", "levain",], l'erreur tombe ligne 3, colonne 29, sur le crochet qui suit la virgule finale. De même, quand la virgule manque en fin de ligne, l'erreur est signalée au début de la clé suivante, sur la ligne d'après (colonne 3 avec une indentation de deux espaces). Et si un guillemet fermant manque ligne 2, comme dans "nom": "Carnet, l'outil s'arrête à la fin de cette ligne (colonne 18) : une chaîne ne peut pas contenir de retour à la ligne brut.
| Écrit | Problème | Correction |
|---|---|---|
| {'ville': 'Lyon'} | Guillemets simples | {"ville": "Lyon"} |
| {ville: "Lyon"} | Clé sans guillemets | {"ville": "Lyon"} |
| [1, 2, 3,] | Virgule finale | [1, 2, 3] |
| {"actif": True} | Majuscule | {"actif": true} |
| {"code": 007} | Zéro initial | {"code": "007"} |
| {"prix": .5} | Chiffre manquant avant le point | {"prix": 0.5} |
| {"x": NaN} | Valeur inconnue en JSON | {"x": null} |
| {"a": 1} // note | Commentaire | {"a": 1} |
| {"a": 1} {"b": 2} | Deux valeurs racines | [{"a": 1}, {"b": 2}] |