Aller au contenu
Case Converter Online
fr

Convertir du JSON en YAML

Collez du JSON pour obtenir un YAML propre, ou changez de sens pour transformer du YAML en JSON. La conversion s'exécute dans votre navigateur pendant la frappe.

Collez du JSON ou appuyez sur Exemple. La conversion se fait dans votre navigateur.

JSON et YAML : les mêmes données, deux styles

JSON et YAML décrivent les mêmes choses : objets (appelés mappings en YAML), listes, chaînes, nombres, booléens et null. Le JSON utilise accolades, crochets, guillemets et virgules. Le YAML utilise l’indentation et des tirets, ce qui le rend plus court et plus facile à lire et à modifier à la main. C’est pourquoi des outils comme Kubernetes, Docker Compose, GitHub Actions et Ansible utilisent le YAML pour la configuration, alors que les API parlent en général JSON.

On a souvent besoin de passer de l’un à l’autre. Une API renvoie du JSON et vous le voulez dans un fichier de configuration. Ou une configuration YAML doit être envoyée à un programme qui ne lit que le JSON. Ce convertisseur fait les deux.

Mode d’emploi

  1. Choisissez un sens avec le bouton JSON vers YAML ou YAML vers JSON.
  2. Collez vos données dans la zone de gauche, appuyez sur Ouvrir un fichier ou sur Exemple. Le résultat apparaît à droite pendant la frappe.
  3. Choisissez une Indentation de 2 ou 4 espaces. Dans le sens YAML vers JSON, il y a aussi une option Minifié.
  4. Pour JSON vers YAML, activez Trier les clés de A à Z pour ranger les clés par ordre alphabétique.
  5. Appuyez sur Copier, ou sur Télécharger pour enregistrer un fichier .yaml ou .json.

Quand vous changez de sens, le résultat actuel passe dans la zone de saisie : vous pouvez convertir dans un sens puis dans l’autre pour vérifier un aller-retour.

Exemple de JSON vers YAML

{"name":"web-app","version":3,"private":true,"ports":[80,443],"database":{"host":"localhost","password":null},"tags":["api","v2"]}

devient :

name: web-app
version: 3
private: true
ports:
  - 80
  - 443
database:
  host: localhost
  password: null
tags:
  - api
  - v2

Des guillemets là où il faut

Certaines chaînes ressemblent à d’autres types pour un analyseur YAML. Le convertisseur les met entre guillemets pour qu’elles restent des chaînes. Ce JSON :

{"zip":"02134","enabled":"yes","version":"1.10","note":"a: b","empty":""}

devient :

zip: "02134"
enabled: "yes"
version: "1.10"
note: "a: b"
empty: ""

Sans les guillemets, 02134 perdrait son zéro de tête, 1.10 deviendrait le nombre 1.1, et un ancien analyseur YAML 1.1 (PyYAML et beaucoup d’outils de CI suivent ces règles) lirait yes comme true. Le convertisseur suit les règles de guillemets les plus strictes, pour que le résultat se lise de la même façon dans les anciens et les nouveaux analyseurs. Les dates comme "2024-01-15" sont mises entre guillemets pour la même raison. Les textes français, comme une valeur "Note : à relire", reçoivent aussi des guillemets dès qu’ils contiennent un deux-points suivi d’une espace.

Exemple de YAML vers JSON

# App settings
name: web-app
ports:
  - 80
  - 443
debug: false
retries: 3
owner: ~

devient :

{
  "name": "web-app",
  "ports": [
    80,
    443
  ],
  "debug": false,
  "retries": 3,
  "owner": null
}

Le commentaire a disparu, puisque le JSON n’a pas de commentaires, et ~ est le raccourci YAML de null.

Les clés de fusion sont résolues. Ce fichier de style Rails :

defaults: &defaults
  adapter: postgres
  host: localhost
development:
  <<: *defaults
  database: dev_db

donne :

{
  "defaults": {
    "adapter": "postgres",
    "host": "localhost"
  },
  "development": {
    "adapter": "postgres",
    "host": "localhost",
    "database": "dev_db"
  }
}

Deux documents séparés par --- (par exemple kind: Service et kind: Deployment) deviennent un seul tableau. Avec l’option Minifié, cela donne [{"kind":"Service"},{"kind":"Deployment"}].

Comment les valeurs sont lues

Le sens YAML vers JSON suit les règles du YAML 1.2. Selon ces règles, yes, no et on sont de simples chaînes, seuls true et false sont des booléens, et les dates restent des chaînes. Cette saisie :

a: yes
b: no
c: on
d: true
e: 010
f: 0o10
g: 1e3
h: 2024-01-15

se convertit (minifiée) en :

{"a":"yes","b":"no","c":"on","d":true,"e":10,"f":8,"g":1000,"h":"2024-01-15"}

Notez que 010 est lu comme dix, et que 0o10 est l’octal de huit. Des valeurs françaises comme oui ou non restent toujours des chaînes, quel que soit l’analyseur.

Si une valeur doit rester du texte, mettez-la entre guillemets dans le YAML.

Conseils pour un aller-retour propre

  • Convertir du JSON en YAML puis revenir donne les mêmes données, mais pas toujours le même texte. L’ordre des clés est conservé, sauf si vous activez Trier les clés de A à Z.
  • Les commentaires, ancres et balises personnalisées du YAML n’ont pas d’équivalent JSON. Les ancres sont développées en copies complètes des données.
  • Les très grands entiers, comme les identifiants à 20 chiffres, restent exacts de JSON vers YAML quand le navigateur le permet. De YAML vers JSON, ils passent par les nombres JavaScript : stockez donc les longs identifiants sous forme de chaînes entre guillemets.
  • Vos fichiers restent sur votre appareil. Rien n’est envoyé.

Erreurs

Les erreurs sont signalées avec la ligne et la colonne, et Afficher dans l’entrée vous y amène. Une virgule finale en JSON donne Ligne 3, colonne 1 : Une virgule finale avant « } » n'est pas autorisée. En YAML, une clé répétée donne Map keys must be unique, et les tabulations utilisées pour l’indentation sont refusées, car le YAML n’autorise que les espaces.

Autres façons de convertir

yq. La version Go de yq convertit en ligne de commande : elle accepte le JSON en entrée, puisque le JSON est du YAML valide, et sait écrire l’un ou l’autre format.

Python. Avec le paquet PyYAML, yaml.safe_dump(json.load(f)) écrit du YAML à partir d’un fichier JSON. PyYAML suit le YAML 1.1, vérifiez donc les chaînes comme yes et no.

VS Code. Plusieurs extensions ajoutent des commandes pour convertir une sélection entre JSON et YAML.

Outils associés

Pour ranger un fichier YAML sans le convertir, utilisez le formateur YAML. Pour vérifier ou indenter d’abord le JSON, utilisez le formateur JSON. Pour des données de tableur, commencez par le convertisseur CSV en JSON.

JSON en YAML : questions fréquentes

Pourquoi certaines valeurs sont-elles entre guillemets dans le YAML ?

Les chaînes qu'un analyseur YAML pourrait lire autrement reçoivent des guillemets. "02134" deviendrait le nombre 2134, et "yes" deviendrait true dans les anciens analyseurs. Les guillemets les gardent en texte, pour que le YAML veuille dire exactement la même chose que le JSON.

Que deviennent les commentaires quand je convertis du YAML en JSON ?

Ils disparaissent, car le JSON n'a pas de commentaires. Si vous reconvertissez, ils ne reviennent pas. Gardez votre fichier YAML d'origine si les commentaires comptent.

Peut-on convertir un fichier contenant plusieurs documents YAML ?

Oui. Les documents séparés par --- deviennent un tableau JSON, avec un élément par document, dans le même ordre.

Les ancres et les clés de fusion sont-elles prises en charge ?

Oui. Les alias comme *defaults sont remplacés par les données qu'ils désignent, et les clés de fusion écrites <<: *defaults sont fusionnées dans le mapping, comme l'attendent Docker Compose et Rails.

Mes données sont-elles envoyées en ligne ?

Non. Les deux sens s'exécutent dans votre navigateur. Rien de ce que vous collez ou ouvrez n'est envoyé.

Plus d'outils code et données

Voir tous les outils