Convertir entre JSON et YAML

convertit du JSON en YAML (et inversement) en préservant la structure, avec indentation configurable. Pratique pour migrer une configuration entre fichiers .json et .yaml

À 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.parse et JSON.stringify sans 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 postal 01234 non quoté devient l'entier 1234, et un nom de pays NO (Norvège) devient false. 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/off comme booléens, ce que la 1.2 a supprimé. Les comportements diffèrent aussi sur les nombres en base 8.
  • Dates implicites : 2024-01-15 sans 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 :

  1. Collez votre document source (JSON ou YAML) dans le champ d'entrée.
  2. Sélectionnez le sens de conversion souhaité (JSON vers YAML, ou YAML vers JSON).
  3. Cliquez sur le bouton de conversion : le résultat formaté apparaît dans la zone de sortie.
  4. 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 disponibles
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - récupère le schéma de cet outil
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - exécute cet outil avec un payload JSON