JSON vs YAML : Quel format de configuration utiliser ?
Réponse rapide
Utilisez JSON pour APIs, l'échange de données et les cas où une analyse et une validation strictes sont importantes. Utilisez YAML pour les fichiers de configuration, les manifestes DevOps et les cas où la lisibilité humaine et les commentaires sont importants. YAML est un surensemble JSON — chaque document JSON valide est un YAML valide.
Introduction
JSON et YAML sont tous deux des formats de sérialisation de données lisibles par l'homme. JSON est strict, minimal et omniprésent dans le Web APIs. YAML est un sur-ensemble de JSON qui ajoute des commentaires, des chaînes multilignes, des ancres et une structure basée sur l'indentation, ce qui le rend populaire pour les fichiers de configuration (Docker Compose, Kubernetes, pipelines CI/CD).
Pas à pas
-
Comparez la syntaxe et la lisibilité
JSON utilise des accolades et des guillemets : {"key": "value"}. YAML utilise l'indentation et les deux-points : clé : valeur. YAML est plus propre pour la configuration : pas de guillemets nécessaires pour les chaînes, pas de virgules entre les éléments, pas d'accolades. JSON est plus explicite et moins sujet aux erreurs pour l'échange de données.
-
Comparez les fonctionnalités
YAML prend en charge : les commentaires (#), les chaînes multilignes (|, >), les ancres (&) et les alias (*), plusieurs documents dans un seul fichier (---) et les types complexes. JSON ne prend en charge aucun de ces éléments : pas de commentaires, pas de chaînes multilignes, pas de références. La simplicité de JSON est intentionnelle : c'est un format d'échange de données, pas un langage de configuration.
-
Comparez la sécurité et l'analyse
L'analyse JSON est rapide et sûre — JSON.parse est intégré à chaque moteur JavaScript. L'analyse YAML est plus lente et plus complexe : la spécification YAML compte plus de 80 pages contre les 2 pages de JSON. YAML présente des risques de sécurité (attaques d'un milliard de rires via des ancres) que JSON n'a pas. Utilisez toujours un analyseur YAML sécurisé qui désactive les ancres.
-
Comparez l'utilisation de l'écosystème
JSON : REST APIs, package.json, tsconfig.json, bases de données NoSQL, applications Web. YAML : Docker Compose, manifestes Kubernetes, actions GitHub, playbooks Ansible, configurations CI/CD, spécifications OpenAPI. JSON domine les données d'exécution ; YAML domine la configuration.
-
Décidez en fonction de votre cas d'utilisation
APIs, échange de données, NoSQL, état de l'application Web : JSON. Fichiers de configuration, DevOps, CI/CD, infrastructure-as-code : YAML. Si les humains l’écrivent à la main : YAML. Si les machines le génèrent et le consomment : __GARDER_2__.
Exemples
Même configuration dans JSON et YAML
Saisir: JSON: {"server": {"port": 8080, "host": "localhost"}}
YAML: server:\n port: 8080\n host: localhost
Sortir: YAML est 30 % plus court et prend en charge les commentaires. JSON est plus strict et universellement analysable.
Problèmes courants
- Erreurs d'indentation YAML : YAML utilise l'indentation pour la structure, et un seul espace incorrect interrompt l'analyse - utilisez un éditeur avec le linting YAML et utilisez toujours des espaces, jamais des tabulations.
- Attaque YAML milliard de rires : les ancres et les alias YAML peuvent créer une expansion exponentielle, provoquant un DoS – utilisez un analyseur YAML sécurisé qui désactive les ancres (par exemple, yaml.safe_load en Python).
- JSON n'a pas de commentaires : la spécification JSON interdit les commentaires, ce qui rend les fichiers de configuration plus difficiles à annoter – utilisez YAML pour la configuration modifiée par l'homme, JSON pour les données générées par la machine.
- Surprises de typage implicite YAML : YAML convertit automatiquement oui/non en booléens et 1.0 en flottant, ce qui peut casser les champs de chaîne — citez explicitement les chaînes pour éviter une coercition de type inattendue.
Conseils
- Utilisez YAML pour la configuration créée par l'homme (Docker Compose, Kubernetes, CI/CD) et JSON pour l'échange de données générées par la machine (APIs, NoSQL, état de l'application).
- Utilisez toujours un analyseur YAML sécurisé qui désactive les ancres et les alias – n'utilisez jamais un chargeur YAML à usage général sur une entrée non fiable.
- Lors de la conversion de YAML en JSON, attendez-vous à perdre des commentaires, des chaînes multilignes et des ancres — JSON est un sous-ensemble de YAML, et non l'inverse pour les fonctionnalités.
- Indentez YAML avec 2 espaces de manière cohérente – mélanger des tabulations et des espaces ou utiliser une indentation incohérente est l'erreur d'analyse YAML la plus courante.