JSON vs YAML : différences et cas d'usage

JSON et YAML sont les deux formats de sérialisation textuels les plus utilisés pour décrire des données structurées : configuration d'application, payload d'API, fichiers d'infrastructure, manifests Kubernetes, pipelines CI/CD. Tous deux représentent les mêmes structures fondamentales (objets, listes, scalaires) mais avec des philosophies différentes : JSON privilégie la lisibilité machine et l'universalité, YAML mise sur la lisibilité humaine et la concision. Cet article compare les deux formats point par point pour vous aider à choisir.

Qu'est-ce que JSON ?

JSON (JavaScript Object Notation) est un format de sérialisation introduit par Douglas Crockford au début des années 2000, dérivé de la syntaxe littérale d'objet JavaScript. Standardisé par RFC 8259 et ECMA-404, il est aujourd'hui le format pivot du web : la quasi-totalité des API REST, des bases NoSQL et des configurations frontend l'utilisent.

JSON repose sur deux structures :

  • Une collection ordonnée de paires clé-valeur (l'objet, entre accolades)
  • Une liste ordonnée de valeurs (le tableau, entre crochets)

Les valeurs scalaires sont string, number, true, false ou null. Les chaînes sont obligatoirement entourées de guillemets doubles. JSON ne supporte pas les commentaires.

Qu'est-ce que YAML ?

YAML (YAML Ain't Markup Language) est un format apparu en 2001, conçu dès le départ pour être lisible par un humain. La spécification actuelle est YAML 1.2.2. Sa caractéristique distinctive : il utilise l'indentation pour exprimer la hiérarchie, à la manière de Python.

YAML est un sur-ensemble de JSON depuis la version 1.2 : tout document JSON valide est un document YAML valide. Mais YAML ajoute beaucoup : commentaires, chaînes sans guillemets, multi-lignes, ancres et alias, tags pour le typage explicite, documents multiples dans un même fichier (---).

Syntaxe comparée

Voici la même structure exprimée dans les deux formats.

JSON

{
  "name": "cdrn",
  "version": "1.14",
  "tags": ["seo", "tools", "open-source"],
  "author": {
    "name": "Adrien",
    "email": "contact@example.com"
  },
  "active": true,
  "stars": null
}

YAML

# Configuration projet
name: cdrn
version: "1.14"
tags:
  - seo
  - tools
  - open-source
author:
  name: Adrien
  email: contact@example.com
active: true
stars: null

Sur le même contenu, YAML occupe à peu près le même nombre de lignes mais évite les accolades, les crochets, les virgules de fin et les guillemets sur la plupart des chaînes. Les commentaires (lignes #) sont autorisés.

Types supportés

JSON connaît 6 types : object, array, string, number, boolean, null. Pas de date native, pas de binaire, pas de distinction entier/flottant explicite.

YAML 1.2 connaît les mêmes que JSON et ajoute : timestamps ISO 8601, binaires (encodés base64 via le tag !!binary), entiers et floats distincts, l'infini, NaN, et les types personnalisés via tags (!!str, !!int, !!float...). YAML 1.1 acceptait yes/no/on/off comme booléens : un piège classique sur les anciens parsers.

Performance et écosystème

JSON est typiquement 3 à 10 fois plus rapide à parser que YAML, et ses parseurs sont disponibles partout (intégré au runtime de la quasi-totalité des langages). Les bibliothèques YAML sont plus lourdes parce qu'elles gèrent un grammaire plus riche (anchors, tags, multi-doc).

Du côté de l'écosystème : JSON domine les API HTTP, les bases NoSQL (MongoDB, CouchDB), les fichiers package.json, composer.json, tsconfig.json. YAML s'est imposé pour la configuration applicative et l'infrastructure-as-code : Symfony, Spring Boot, Rails, Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.

Tableau comparatif

Critère JSON YAML
Lisibilité humaine Bonne Excellente
Lisibilité machine Excellente Correcte
Commentaires Non Oui (#)
Indentation significative Non Oui
Vitesse de parsing Rapide Plus lente
Types riches (date, binaire) Non Oui
Anchors / alias Non Oui
Cas d'usage typique API, stockage, échange de données Configuration, infra-as-code

Cas d'usage typiques

Choisir JSON quand

  • Vous concevez une API REST ou un endpoint webhook
  • Vous stockez des données dans une base NoSQL ou un cache
  • Vous échangez des données entre frontend et backend
  • La performance de parsing est critique (haut débit, edge)
  • Vous voulez un format universellement supporté sans dépendance

Choisir YAML quand

  • Vous écrivez une configuration applicative éditée à la main
  • Vous avez besoin de commentaires pour documenter les options
  • Vous écrivez du Kubernetes, Docker Compose, GitHub Actions, Ansible
  • Vous voulez factoriser des blocs avec des ancres et alias
  • La lisibilité prime sur la rapidité de traitement

Recommandation

La règle simple : JSON pour la machine, YAML pour l'humain. Si votre fichier est produit ou consommé par un programme, prenez JSON. S'il est écrit et relu à la main, prenez YAML. Beaucoup d'écosystèmes acceptent les deux : Symfony lit YAML, JSON et XML pour ses configurations, Kubernetes accepte les deux pour ses manifests. Dans le doute, partez sur YAML pour la configuration humaine et JSON pour les flux automatisés.

Vous pouvez tester la conversion d'un format à l'autre avec notre convertisseur JSON / YAML et formater rapidement un document avec le formateur JSON.

Questions fréquentes

YAML est-il plus lent que JSON ?

Oui, en règle générale, parser un document YAML coûte plusieurs fois plus de CPU que parser le même document JSON, parce que la grammaire YAML est plus riche (indentation, tags, anchors). En pratique, l'écart est négligeable pour des fichiers de configuration. Il devient sensible quand vous parsez des dizaines de milliers de documents en boucle.

Peut-on convertir automatiquement YAML en JSON ?

Oui : tout document YAML peut être converti en JSON sans perte si on évite les types YAML spécifiques (timestamps, anchors). L'inverse est encore plus simple, JSON étant un sous-ensemble de YAML 1.2. Notre convertisseur fait les deux sens.

JSON accepte-t-il les commentaires ?

Non, le standard JSON les interdit. Des dialectes existent (JSON5, JSONC) mais ne sont pas universellement supportés. Si vous avez besoin de commentaires, prenez YAML ou TOML.

Pourquoi Kubernetes utilise YAML et non JSON ?

Les manifests Kubernetes sont écrits et relus par des humains. YAML offre les commentaires, une syntaxe moins bruitée et la possibilité de factoriser via les anchors. L'API Kubernetes accepte aussi le JSON, mais l'usage idiomatique reste le YAML.

YAML est-il vraiment un sur-ensemble de JSON ?

Oui depuis YAML 1.2 : tout document JSON valide est un document YAML valide. Cela permet d'embarquer du JSON dans un fichier YAML sans le modifier, ce qui est pratique pour les blocs générés ou copiés-collés.