Convertir entre JSON et YAML
- Tableau de bord
- Documentation
- API
À quoi sert ce convertisseur JSON / YAML ?
Cet outil transforme un document YAML en JSON et inversement, en préservant la structure des données (objets, tableaux, types scalaires). La conversion JSON vers YAML, ou YAML vers JSON, est une opération courante en développement : on génère un fichier OpenAPI YAML à partir d'une spec JSON, on convertit la sortie d'une API REST en YAML pour la commiter dans un dépôt de configuration, on traduit un manifeste Kubernetes YAML en JSON pour le passer à kubectl --dry-run=client -o json, ou on aligne un workflow GitHub Actions avec un schéma JSON. Plus largement, c'est le pont entre le monde de l'échange de données (JSON) et celui de la configuration éditable à la main (YAML).
YAML vs JSON : comparaison directe
JSON et YAML adressent des besoins proches mais des cas d'usage différents. Le tableau suivant résume les différences techniques majeures, utiles pour choisir entre les deux selon le contexte.
| Critère | JSON | YAML |
|---|---|---|
| Lisibilité humaine | Moyenne (accolades, guillemets partout) | Forte (indentation, peu de ponctuation) |
| Verbosité | Plus verbeux | Plus concis |
| Commentaires | Non supportés | Supportés (# commentaire) |
| Multi-documents dans un seul fichier | Non | Oui, via le séparateur --- |
| Anchors et aliases (réutilisation) | Non | Oui (&anchor et *anchor) |
| Système de types | Strict (string, number, bool, null, array, object) | Coercition implicite (yes, no, null, dates, scalaires interprétés) |
| Performance de parsing | Très rapide, parseurs natifs partout | Plus lent, grammaire bien plus large |
| Adoption pour les API REST | Standard de fait | Rare |
| Adoption pour la configuration | Rare (sauf package.json, tsconfig.json) |
Standard de fait (Kubernetes, CI/CD, Ansible) |
Quand utiliser JSON ?
JSON s'impose dès qu'un programme parle à un autre programme. Ses cas d'usage typiques :
- APIs REST et GraphQL : payloads de requête et de réponse.
- Échange de données entre microservices et files de messages.
- Code JavaScript natif :
JSON.parseetJSON.stringifysans dépendance. - Stockage côté navigateur :
localStorage,sessionStorage, IndexedDB. - Requêtes AJAX et
fetch. - Variantes binaires ou orientées flux : BSON (MongoDB), JSON Lines (logs, datasets ML), MessagePack.
- Configuration d'outils JS / TS :
package.json,tsconfig.json,composer.json.
Quand utiliser YAML ?
YAML s'impose dès qu'un humain édite régulièrement le fichier. Ses cas d'usage typiques :
- Docker Compose (
docker-compose.yml) et profils de stack. - Manifestes Kubernetes (Deployment, Service, Ingress, Helm charts).
- Playbooks Ansible et inventaires.
- Pipelines CI/CD : GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- Spécifications OpenAPI / Swagger et AsyncAPI.
- Configuration applicative annotée (Symfony, Spring Boot, Rails) où les commentaires sont utiles.
- Fichiers édités fréquemment à la main, où la concision et la lisibilité priment sur la vitesse de parsing.
Pièges courants en YAML
YAML est plus permissif que JSON, ce qui en fait un format puissant mais traître. Les pièges les plus fréquents :
- Indentation : les tabulations sont interdites par la spécification, seuls les espaces sont valides. Mélanger les deux ou changer le nombre d'espaces dans un même bloc casse le parsing.
- Coercition automatique des scalaires :
yes,no,on,off,true,false,null,None,~sont parsés en booléens ou en null. Exemple piège : un code postal01234non quoté devient l'entier1234, et un nom de paysNO(Norvège) devientfalse. Toujours mettre entre guillemets les chaînes ambiguës. - Strings multilignes :
|(block literal) conserve les sauts de ligne tels quels, alors que>(folded) remplace les sauts de ligne par des espaces. Les indicateurs de chomping-et+ajustent le comportement sur le saut final. - YAML 1.1 vs 1.2 : la 1.1 (encore très répandue, par exemple via PyYAML par défaut) traite
yes/no/on/offcomme booléens, ce que la 1.2 a supprimé. Les comportements diffèrent aussi sur les nombres en base 8. - Dates implicites :
2024-01-15sans guillemets est interprété comme un objet date par certains parseurs, pas comme une chaîne.
Exemples côte à côte
Le même document, exprimé en JSON puis en YAML. Configuration simple d'une application avec ses dépendances et son environnement :
Version JSON
{
"name": "cdrn-app",
"version": "1.14.2",
"environment": "production",
"dependencies": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doctrine/orm": "^3.0"
},
"features": ["cache", "mailer", "queue"],
"debug": false
}
Version YAML équivalente
# Configuration de l'application
name: cdrn-app
version: 1.14.2
environment: production
dependencies:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doctrine/orm: '^3.0'
features:
- cache
- mailer
- queue
debug: false
La version YAML est plus courte d'environ 25 % en caractères, accepte un commentaire en tête et se lit comme une liste de propriétés sans bruit syntaxique.
Comment utiliser le convertisseur
Étapes pour convertir vos données :
- Collez votre document source (JSON ou YAML) dans le champ d'entrée.
- Sélectionnez le sens de conversion souhaité (JSON vers YAML, ou YAML vers JSON).
- Cliquez sur le bouton de conversion : le résultat formaté apparaît dans la zone de sortie.
- Vérifiez le rendu, puis utilisez le bouton de copie pour récupérer le résultat dans votre presse-papier.
La conversion est effectuée localement dans votre navigateur ou via une route serveur dédiée selon le tooling : aucune donnée sensible n'est conservée.
Questions fréquentes
JSON ou YAML pour mes fichiers de configuration ?
Si l'écosystème impose un format (Kubernetes en YAML, package.json en JSON), suivez la convention. Sinon, privilégiez YAML pour les configurations longues et annotées que vous éditez à la main, et JSON pour les configurations générées par un programme ou consommées par du code. La présence de commentaires utiles est souvent l'argument décisif en faveur de YAML.
Comment garder les commentaires lors d'un round-trip YAML vers JSON vers YAML ?
Vous ne pouvez pas. JSON ne supporte pas les commentaires : dès qu'on convertit du YAML en JSON, les commentaires sont perdus définitivement. Pour préserver les commentaires lors d'éditions programmatiques, utilisez un parseur qui conserve la mise en forme, comme ruamel.yaml en Python en mode round-trip, ou évitez complètement le passage par JSON.
Pourquoi mon fichier YAML parse correctement en local mais échoue en prod ?
Causes fréquentes : versions de parseur différentes (YAML 1.1 vs 1.2), tabulations introduites par un éditeur, valeurs non quotées qui ressemblent à des booléens (NO, off) ou à des nombres (01234), encodage du fichier (UTF-8 BOM mal géré). Quotez systématiquement les chaînes ambiguës et fixez la version du parseur dans votre projet.
JSON est-il un sous-ensemble de YAML ?
Depuis YAML 1.2, oui en pratique : tout document JSON valide est un document YAML 1.2 valide. L'inverse est faux : un document YAML qui utilise des commentaires, des anchors, des dates implicites ou plusieurs documents dans un fichier ne peut pas être exprimé directement en JSON sans perte d'information.
Quelles alternatives à JSON et YAML connaître ?
TOML : populaire pour la config (Cargo, pyproject.toml), bon compromis lisibilité et typage explicite. INI : très simple, mais pas de structure imbriquée standard. XML : verbeux, mais reste pertinent pour SOAP et certaines configs Java legacy. HCL : utilisé par Terraform. JSON5 et JSONC : extensions de JSON qui autorisent commentaires et virgules traînantes.
Quel est le poids de YAML vs JSON ?
À structure équivalente, YAML est généralement 15 à 30 % plus court en octets, grâce à l'absence de guillemets autour des clés et de la plupart des chaînes, et à l'absence d'accolades. Sur le wire (transport HTTP), JSON minifié reste comparable, mais YAML reste plus compact en version lisible. Pour la performance pure côté parsing, JSON est plusieurs fois plus rapide, ce qui justifie son usage pour les API à fort trafic.
Exemple de requête
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Schéma d'entrée
| Champ | Type | Requis | Défaut |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Points d'accès
GET https://cdrn.fr/api/v1/tools- liste tous les outils disponiblesGET https://cdrn.fr/api/v1/tools/json-yaml-converter- récupère le schéma de cet outilPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- exécute cet outil avec un payload JSON