JSON vs YAML : syntaxe comparée
Types de base, imbrication, commentaires : les différences de syntaxe entre JSON et YAML, et le piège classique des booléens implicites.
Types de base
{ "nom": "Ana", "age": 32, "actif": true, "notes": null, "tags": ["admin", "beta"] }
nom: Ana age: 32 actif: true notes: null tags: - admin - beta
Objets imbriqués
{ "adresse": { "ville": "Paris", "cp": "75001" } }
adresse: ville: Paris cp: "75001"
Règles à retenir
| JSON | YAML | |
|---|---|---|
| Commentaires | non supportés | oui, avec # |
| Indentation | libre (accolades) | significative, espaces uniquement |
| Guillemets sur les chaînes | obligatoires | optionnels sauf ambiguïté |
| Virgule finale | interdite | sans objet |
| Multi-lignes | non | oui, avec ` |
En YAML, oui, non, yes, no, on, off sont parfois interprétés comme des booléens selon le parseur. Mettez des guillemets si vous voulez une vraie chaîne : pays: "no".
Références et ancres en YAML
defaults: &defaults adapter: mysql timeout: 30 development: <<: *defaults database: dev_db test: <<: *defaults database: test_db
&defaults définit une ancre réutilisable, <<: *defaults la fusionne dans un autre bloc — pratique pour éviter de répéter une configuration commune.
Quand choisir quoi
| Contexte | Format préféré | Pourquoi |
|---|---|---|
| API REST, échange de données | JSON | Natif en JavaScript, parseur présent partout |
| Fichiers de configuration | YAML | Plus lisible pour un humain, commentaires possibles |
| Docker Compose, CI/CD, Kubernetes | YAML | Standard de l'écosystème DevOps |
| Stockage/sérialisation stricte | JSON | Syntaxe non ambiguë, pas de piège d'indentation |
L'indentation YAML doit être faite avec des espaces, jamais des tabulations — un mélange des deux est l'erreur la plus fréquente et produit souvent une erreur de parsing peu explicite.
Merci pour votre retour !