YAML
JSON (JavaScript Object Notation) est aujourd’hui le format le plus populaire pour échanger des données structurées, surtout dans les API web. Il est très strict : tout est basé sur des objets avec des tableaux, des chaînes entre guillemets doubles, des nombres, des booléens (true/false) et null. Sa syntaxe est rigide mais extrêmement prévisible pour les machines, ce qui explique son succès. Cependant, quand un humain doit lire ou écrire du JSON à la main (par exemple dans un fichier de configuration), cette rigueur devient vite pénible : les guillemets partout, les virgules obligatoires, l’absence de commentaires rendent le fichier verbeux et sujet aux erreurs de syntaxe.
YAML (YAML Ain’t Markup Language) est né justement pour résoudre ce problème de lisibilité tout en restant compatible, dans une très large mesure, avec la structure de données de JSON. YAML est en réalité un sur-ensemble de JSON : tout fichier JSON valide est aussi un YAML valide. Cela signifie que vous pouvez prendre n’importe quel JSON et le parser avec un parseur YAML sans modification. Mais YAML va beaucoup plus loin en offrant une syntaxe beaucoup plus naturelle et agréable pour les humains.
Contrairement à JSON qui n’autorise qu’une seule façon d’écrire les données (accolades et crochets), YAML propose deux syntaxes principales : la syntaxe indentée (la plus courante, proche du Python) et la syntaxe « en ligne » qui ressemble énormément à JSON. Grâce à l’indentation (généralement 2 espaces), on élimine presque totalement les accolades, les virgules de fin et les guillemets autour des clés. YAML autorise aussi nativement les commentaires avec #, les listes simples avec - et supporte des types supplémentaires comme les dates, les timestamps ou les valeurs null écrites ~ ou null ou simplement absentes.
Si on compare avec XML, on voit que YAML et XML poursuivent des objectifs opposés bien qu’ils soient tous les deux plus lisibles que JSON brut. XML est un langage de balisage (markup language) avec des balises ouvrantes et fermantes, des attributs, des namespaces, conçu à l’origine pour structurer des documents. Il est extrêmement verbeux et exigeant en syntaxe. YAML, au contraire, n’est pas un langage de balisage mais un format de sérialisation de données. Il cherche la concision et la clarté maximale pour représenter des structures de données (objets, listes, valeurs scalaires) sans aucune balise. Là où XML répète le nom de la balise deux fois (<person>…</person>), YAML écrit simplement person: suivi de ses propriétés indentées.
On peut voir une évolution : XML (années 90-2000) → JSON (années 2010, priorité à la simplicité machine) → YAML (priorité à la lisibilité humaine tout en restant 100 % compatible avec JSON. C’est pourquoi YAML s’est imposé massivement dans les fichiers de configuration (Docker Compose, Kubernetes, GitHub Actions, Ansible, etc.) : il offre le offre un compromis.
Syntaxe
1. Les trois briques de base
Tout fichier YAML est construit avec seulement trois types de données :
- Scalaires : une valeur simple (chaîne, nombre, booléen, null, date)
- Séquences : des listes ordonnées (équivalent d’un tableau)
- Objets : des dictionnaires clé → valeur
# Exemple réunissant les trois prénom: Alice # mapping (clé: valeur) âge: 32 # mapping développeuse: true # mapping hobbies: # mapping - lecture # séquence (liste) - escalade - photographie
2. L’indentation
YAML utilise l’indentation avec des espaces pour indiquer la hiérarchie. Le nombre d’espaces par niveau est libre, mais doit être constant dans tout le fichier (la convention la plus courante est 2 espaces).
3. Les objets
nom: Alice Dupont âge: 32 adresse: rue: 12 rue des Lilas ville: Paris pays: France
4. Écrire des séquences (listes)
Deux syntaxes équivalentes :
# Style bloc (le plus lisible) fruits: - pomme - banane - orange # Style « flow » (comme JSON) fruits: [pomme, banane, orange]
5. Les chaînes de caractères
# Sans guillemets (la plupart du temps) nom: Alice # Avec simples ou doubles guillemets si besoin message: 'Elle a dit : "Salut !"' description: "Texte sur\nplusieurs lignes\navec retours à la ligne" # Bloc littéral (garde exactement le texte, retours à la ligne inclus) poeme: | Roses are red Violets are blue YAML est génial Et toi aussi ! # Bloc replié (les retours à la ligne deviennent des espaces) resume: > Ceci est un long texte qui sera mis sur une seule ligne lors du parsing.
6. Les booléens et null
actif: true # ou True, TRUE, on, On, yes… inactif: false # ou off, no… site_web: null # ou ~ ou simplement rien → site_web:
7. Les commentaires
# Ceci est un commentaire nom: Alice # commentaire en fin de ligne autorisé # Les commentaires rendent les fichiers de config très lisibles
8. Style flow (comme JSON) – à utiliser avec parcimonie
personne: { nom: Alice, âge: 32, hobbies: [lecture, escalade] }
Exemples
Considérons les exemples suivants.
1. En XML
<person>
<name>Alice Dupont</name>
<age>32</age>
<isDeveloper>true</isDeveloper>
<address>
<street>12 rue des Lilas</street>
<city>Paris</city>
<country>France</country>
</address>
<hobbies>
<hobby>lecture</hobby>
<hobby>escalade</hobby>
<hobby>photographie</hobby>
</hobbies>
</person>
2. En JSON
{
"name": "Alice Dupont",
"age": 32,
"isDeveloper": true,
"address": {
"street": "12 rue des Lilas",
"city": "Paris",
"country": "France"
},
"hobbies": ["lecture", "escalade", "photographie"]
}
3. En YAML
# Exemple de personne en YAML name: Alice Dupont age: 32 isDeveloper: true # booléen address: street: 12 rue des Lilas city: Paris country: France hobbies: - lecture # liste avec des tirets - escalade - photographie
Laboratoire YAML
Utilisez l'application suivante pour tester votre compréhension du YAML.