JSON
13 tools
Qu'est-ce que JSON ?
JSON (JavaScript Object Notation) est un format d'échange de données léger et textuel, facile à lire et à écrire pour les humains, et simple à analyser et à générer pour les machines. Bien qu'issu de JavaScript, JSON est indépendant du langage et constitue désormais le standard de facto pour l'échange de données sur le Web.
JSON représente les données sous forme de paires clé-valeur organisées en objets et en tableaux. Sa simplicité en a fait le format dominant pour les API REST, les fichiers de configuration et le stockage de données.
Bref historique
JSON a été formalisé par Douglas Crockford au début des années 2000. La spécification a été publiée sur json.org en 2001. La RFC 4627 a suivi en 2006, et l'actuel standard ECMA-404 en 2013.
Avant JSON, XML était le format d'échange de données dominant sur le Web. Le minimalisme de JSON — sans attributs, instructions de traitement ni espaces de noms — l'a rendu immédiatement populaire. Dès 2010, JSON avait largement supplanté XML pour les API Web.
Types de données JSON
JSON prend en charge exactement six types de données. Chaque valeur dans un document JSON valide doit être l'un d'eux :
"hello world"Toute séquence de caractères Unicode entre guillemets doubles. Les séquences d'échappement (\n, \t, \") sont prises en charge.
42 / 3.14 / 1e10Entier ou nombre à virgule flottante. La notation scientifique (1e10) est autorisée. Pas de distinction entre int et float.
true / falseLes tokens littéraux true ou false (minuscules uniquement). Pas de valeur truthy/falsy — uniquement des booléens stricts.
nullLe token littéral null (minuscules). Représente l'absence de valeur. Différent de undefined, qui n'est pas un type JSON.
[1, "two", null]Une liste ordonnée de valeurs entre crochets. Les éléments peuvent être de types mixtes et les tableaux peuvent être imbriqués.
{"key": "value"}Une collection non ordonnée de paires clé-valeur entre accolades. Les clés doivent être des chaînes.
{
"string": "hello world",
"number": 42,
"float": 3.14,
"boolean": true,
"null": null,
"array": [1, 2, 3],
"object": { "nested": "value" }
}Règles de syntaxe JSON
JSON a des règles de syntaxe strictes. Un léger écart provoque une erreur d'analyse. Voici les six règles les plus importantes :
Toutes les valeurs de chaîne et les clés d'objet doivent utiliser des guillemets doubles. Les guillemets simples ne sont pas du JSON valide.
JSON n'autorise pas les virgules de fin après le dernier élément d'un tableau ou la dernière propriété d'un objet.
JSON n'a pas de syntaxe de commentaires. // et /* */ ne sont pas valides. Pour les fichiers de configuration nécessitant des commentaires, envisagez JSON5 ou YAML.
JSON ne prend en charge que six types primitifs. Les valeurs JavaScript comme undefined, NaN, Infinity et les fonctions ne peuvent pas être représentées.
Toutes les clés d'objet doivent être des chaînes entre guillemets. Les clés numériques ou les identifiants sans guillemets ne sont pas autorisés.
JSON est sensible à la casse. true, false et null doivent être en minuscules.
JSON invalide vs. valide
{
'name': 'Alice', // single quotes — invalid
age: 30, // unquoted key — invalid
"scores": [1, 2, 3,], // trailing comma — invalid
"note": undefined // undefined — invalid
}{
"name": "Alice",
"age": 30,
"scores": [1, 2, 3],
"note": null
}JSON dans le Web moderne
API REST
JSON est le format de corps standard pour les requêtes et réponses d'API REST. Pratiquement tous les langages de programmation disposent d'un analyseur JSON intégré.
Fichiers de configuration
package.json, tsconfig.json, .eslintrc et de nombreux autres outils de développement utilisent JSON pour la configuration.
Bases de données NoSQL
Les bases de données documentaires comme MongoDB, CouchDB et Amazon DynamoDB stockent les données sous forme de documents JSON.
État et données frontend
localStorage et sessionStorage stockent des chaînes, donc JSON.stringify/JSON.parse sont constamment utilisés pour sérialiser les objets JavaScript.
JSON vs. autres formats
JSON n'est pas toujours le meilleur choix. Voici comment il se compare aux autres formats de données courants :
Syntaxe plus simple, taille de fichier réduite, plus facile à analyser, plus lisible
Pas de support pour les attributs, instructions de traitement ou espaces de noms XML
Vous avez besoin de métadonnées de document, de modèles de contenu mixte ou de schémas XML
Syntaxe plus stricte (moins d'ambiguïté), meilleur support d'outils, plus portable
Pas de support de commentaires, légèrement plus verbeux pour les données profondément imbriquées
Fichiers de configuration édités manuellement, Docker Compose, GitHub Actions, Kubernetes
Meilleur support d'écosystème, analyse plus rapide, gestion des types plus prévisible
Pas de type date natif, moins convivial pour les structures imbriquées complexes
Rust (Cargo.toml), Python (pyproject.toml), configuration d'application de style INI
Données structurées et imbriquées, non limité aux lignes et colonnes plates
Taille de fichier beaucoup plus grande, moins performant pour les données purement tabulaires
Données de tableur, exports de base de données, données à ouvrir dans Excel ou pandas
JSON Schema
JSON Schema est un vocabulaire permettant de valider la structure des documents JSON. Un schéma décrit les types attendus, les champs obligatoires et les contraintes d'une valeur JSON.
Des outils comme ajv (JavaScript), jsonschema (Python) et les validateurs intégrés dans de nombreux IDE prennent en charge JSON Schema. OpenAPI utilise JSON Schema pour décrire les corps de requêtes et réponses d'API.
Pièges courants de JSON
Les nombres JSON sont analysés comme des flottants à double précision IEEE 754. Les entiers supérieurs à 2^53 perdent en précision. Transmettez les grands ID sous forme de chaînes.
JSON n'a pas de type date. Les dates sont généralement sérialisées sous forme de chaînes ISO 8601 ou de timestamps Unix.
JSON.stringify lève une TypeError sur les références d'objets circulaires.
JSON doit être encodé en UTF-8, UTF-16 ou UTF-32. Un BOM au début d'un fichier JSON n'est pas conforme à la spécification.
Lors de l'analyse de JSON non fiable, la fusion d'objets analysés peut être vulnérable aux attaques de pollution de prototype via la clé __proto__.
{"key": null} et un "key" manquant sont sémantiquement différents. Null signifie que le champ existe avec une valeur absente ; manquant signifie que le champ n'a pas été spécifié.
Questions fréquentes
JSON signifie JavaScript Object Notation. Malgré son nom, JSON est totalement indépendant du langage.
Non. JSON est un format texte qui ressemble à un littéral d'objet JavaScript, mais avec des règles plus strictes.
Non. La spécification JSON n'inclut pas de syntaxe de commentaires. Pour les fichiers de configuration nécessitant des commentaires, utilisez JSONC, JSON5 ou YAML.
JSONP était un contournement de la politique d'origine identique du navigateur. Il est obsolète — utilisez CORS à la place.
En JavaScript : JSON.stringify(data, null, 2). En Python : json.dumps(data, indent=2). En terminal : cat file.json | jq .
NDJSON stocke un objet JSON par ligne. Populaire pour les fichiers journaux et les exports de données volumineux.
Les espaces entre les tokens sont insignifiants. Le formatage est une question de style, pas de sémantique.
La spécification JSON ne définit pas de limite de taille. En pratique, vous êtes limité par la mémoire de l'analyseur et le transfert réseau.
Pas directement. Les données binaires doivent être encodées en Base64 avant d'être intégrées dans JSON, ce qui augmente la taille d'environ 33 %.
JSON5 est un sur-ensemble de JSON qui ajoute : clés sans guillemets, chaînes entre guillemets simples, virgules de fin, commentaires et chaînes multilignes.