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.