JSON possède exactement six types de valeur : chaîne, nombre, booléen, nul, tableau et objet. Rien dans la spécification n’en ajoute un septième. Cette courte liste est facile à énoncer et étonnamment facile à se tromper en pratique, surtout aux limites que chaque type possède et que les types natifs d’un langage ne partagent pas.
Chaine
Du texte entre guillemets doubles, jamais de guillemets simples. 'hello' n’est pas du JSON
valide, seul "hello" l’est. Quelques caractères nécessitent un échappement dans une chaîne :
le guillemet lui-même (\"), un antislash (\\), et les caractères de contrôle
\n, \r, \t, \b et \f. Tout le reste, y compris la plupart du texte Unicode,
peut être placé sans échappement tant que le fichier est lui-même en UTF-8 valide. JSON Escape
and Unescape gère la conversion dans les deux
sens et indique exactement quel caractère a cassé une séquence d’échappement
mal formée, plutôt qu’une erreur d’analyse générique.
Nombre
Un seul type numérique, pas de types entier et flottant séparés comme dans certains
langages. Un nombre JSON est une suite de chiffres, un point décimal
optionnel, et un exposant optionnel : 42, -3.14, 2.5e10. Pas d’hexadécimal, pas de
Infinity, pas de NaN, et pas de zéro initial devant un chiffre différent de zéro (0123 est
invalide, 0.123 est correct). La limite la plus délicate ici : le type Number
de JavaScript est un flottant 64 bits, qui ne peut pas représenter exactement chaque entier au-delà d’environ 2^53
(environ neuf mille milliards). Analyser un document JSON contenant un
ID de base de données 64 bits ou un Snowflake ID avec JSON.parse dans la console d’un navigateur
peut faire revenir les derniers chiffres arrondis, sans prévenir. Le JSON
Formatter de ce site est construit sur un flux de
tokens plutôt que sur JSON.parse spécifiquement pour qu’un entier de vingt chiffres
survive un aller-retour sans arrondi, et signale les nombres qu’il n’a pas pu
représenter en sécurité plutôt que d’arrondir sans le dire.
Booleen
Exactement deux valeurs littérales, en minuscules, sans guillemets : true et false.
"true" est une chaîne, pas un booléen, et une source courante de bugs lorsqu’un
champ qui devrait être booléen est sérialisé comme texte quelque part en amont.
Nul
Une valeur littérale, en minuscule, sans guillemets : null. Il représente l’absence
délibérée d’une valeur, ce qui est différent d’une clé qui est complètement
absente. {"middleName": null} signifie “cette personne n’a pas de deuxième nom, et
nous avons vérifié.” Un document sans la clé middleName du tout ne dit rien sur
le fait qu’il en existe une. Les API qui confondent les deux (en utilisant une clé manquante et une
valeur nulle de façon interchangeable) rendent cette distinction impossible à récupérer
côté récepteur.
Tableau
Une liste ordonnée, [ ], séparée par des virgules, avec des éléments de tout type y compris
des types mélangés dans le même tableau : [1, "two", true, null] est du JSON valide même si
ce serait un choix de schéma étrange. L’ordre est garanti et
important ; deux tableaux avec les mêmes éléments dans un ordre différent sont
des valeurs différentes.
Objet
Un ensemble non ordonné de paires clé-valeur, { }, où les clés sont toujours des chaînes (même une
clé en apparence numérique comme "2" est une chaîne, pas un nombre), les valeurs pouvant être de tout type.
Deux clés avec le même nom dans un objet ne sont pas interdites par la
grammaire, bien que la spécification qualifie le comportement de “non recommandé” et
laisse la suite à l’analyseur ; la plupart des implémentations, y compris
JSON.parse, gardent silencieusement la dernière et écartent les précédentes. Le
JSON Validator signale une clé en double comme un
avertissement plutôt que de laisser passer un document en contenant silencieusement, car la
question de quelle valeur survit est le genre de chose qui devrait être une décision explicite.
Ce qu’aucun des six types ne peut contenir
Pas de type date : un horodatage est une chaîne, presque toujours au format ISO 8601
("2026-08-24T10:00:00Z"), par convention plutôt que par quelque chose qu’impose
JSON lui-même. Pas de undefined : une clé qui serait undefined en
JavaScript est omise de l’objet plutôt qu’écrite avec cette valeur,
puisque JSON n’a aucun littéral pour cela. Pas de fonctions, pas de Map ni de Set,
pas de commentaires n’importe où dans le document. Un format qui a besoin de tout cela
(des commentaires en ligne dans une configuration, par exemple) choisit volontairement un format
différent, pas une extension de JSON ; consultez JSON vs YAML
pour le compromis que le support des commentaires et quelques autres commodités impliquent.
L’essayer
Collez n’importe quel document dans le JSON Viewer et chaque valeur reçoit sa propre couleur et son propre badge dans l’arbre, ce qui est un moyen rapide de voir exactement comment un document est typé sans lire le texte brut caractère par caractère. Pour connaître les règles de syntaxe en un coup d’œil, consultez la JSON Cheat Sheet.