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 :

String"hello world"

Toute séquence de caractères Unicode entre guillemets doubles. Les séquences d'échappement (\n, \t, \") sont prises en charge.

Number42 / 3.14 / 1e10

Entier ou nombre à virgule flottante. La notation scientifique (1e10) est autorisée. Pas de distinction entre int et float.

Booleantrue / false

Les tokens littéraux true ou false (minuscules uniquement). Pas de valeur truthy/falsy — uniquement des booléens stricts.

Nullnull

Le token littéral null (minuscules). Représente l'absence de valeur. Différent de undefined, qui n'est pas un type JSON.

Array[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.

Object{"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 :

Chaînes en guillemets doubles uniquement

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.

Pas de virgules de fin

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.

Pas de commentaires

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.

Pas de undefined ni de fonctions

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.

Les clés d'objet doivent être des chaînes

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.

Sensible à la casse

JSON est sensible à la casse. true, false et null doivent être en minuscules.

JSON invalide vs. valide

Invalide
{
  'name': 'Alice',       // single quotes — invalid
  age: 30,              // unquoted key — invalid
  "scores": [1, 2, 3,], // trailing comma — invalid
  "note": undefined     // undefined — invalid
}
Valide
{
  "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 :

JSON vs XML
Avantages de JSON sur XML

Syntaxe plus simple, taille de fichier réduite, plus facile à analyser, plus lisible

Inconvénients de JSON vs XML

Pas de support pour les attributs, instructions de traitement ou espaces de noms XML

Choisissez XML quand

Vous avez besoin de métadonnées de document, de modèles de contenu mixte ou de schémas XML

JSON vs YAML
Avantages de JSON sur YAML

Syntaxe plus stricte (moins d'ambiguïté), meilleur support d'outils, plus portable

Inconvénients de JSON vs YAML

Pas de support de commentaires, légèrement plus verbeux pour les données profondément imbriquées

Choisissez YAML quand

Fichiers de configuration édités manuellement, Docker Compose, GitHub Actions, Kubernetes

JSON vs TOML
Avantages de JSON sur TOML

Meilleur support d'écosystème, analyse plus rapide, gestion des types plus prévisible

Inconvénients de JSON vs TOML

Pas de type date natif, moins convivial pour les structures imbriquées complexes

Choisissez TOML quand

Rust (Cargo.toml), Python (pyproject.toml), configuration d'application de style INI

JSON vs CSV
Avantages de JSON sur CSV

Données structurées et imbriquées, non limité aux lignes et colonnes plates

Inconvénients de JSON vs CSV

Taille de fichier beaucoup plus grande, moins performant pour les données purement tabulaires

Choisissez CSV quand

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

Perte de précision numérique

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.

Pas de type date

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.

Les références circulaires font planter les sérialiseurs

JSON.stringify lève une TypeError sur les références d'objets circulaires.

Problèmes Unicode et BOM

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.

Pollution de prototype

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__.

Null vs. clé manquante

{"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

Que signifie JSON ?

JSON signifie JavaScript Object Notation. Malgré son nom, JSON est totalement indépendant du langage.

JSON est-il identique à un objet JavaScript ?

Non. JSON est un format texte qui ressemble à un littéral d'objet JavaScript, mais avec des règles plus strictes.

JSON peut-il avoir des commentaires ?

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.

Quelle est la différence entre JSON et JSONP ?

JSONP était un contournement de la politique d'origine identique du navigateur. Il est obsolète — utilisez CORS à la place.

Comment formater JSON de manière lisible ?

En JavaScript : JSON.stringify(data, null, 2). En Python : json.dumps(data, indent=2). En terminal : cat file.json | jq .

Qu'est-ce que NDJSON ou JSON Lines ?

NDJSON stocke un objet JSON par ligne. Populaire pour les fichiers journaux et les exports de données volumineux.

Les espaces blancs sont-ils importants en JSON ?

Les espaces entre les tokens sont insignifiants. Le formatage est une question de style, pas de sémantique.

Quelle est la taille maximale d'un fichier JSON ?

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.

JSON peut-il représenter des données binaires ?

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 %.

Qu'est-ce que JSON5 ?

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.