YAML en JSON

Convertissez du YAML en JSON

À propos de l’outil YAML en JSON

L’outil YAML en JSON analyse le YAML collé avec js-yaml, selon les règles de YAML 1.2 pour les booléens et null, puis écrit un JSON indenté de 2 espaces. Les mappages deviennent des objets et les listes d’éléments précédés de - deviennent des tableaux ; les ancres et les alias sont développés et les clés de fusion sont appliquées ; plusieurs documents --- deviennent un seul tableau JSON. Seuls true et false sont des booléens : yes et no restent donc des chaînes, et les dates restent du texte. Les entiers gardent tous leurs chiffres, mais les décimaux deviennent des nombres JSON : un 1.10 sans guillemets s’écrit 1.1. Les étiquettes personnalisées comme !Ref ne sont pas prises en charge. js-yaml fait tout cela dans l’onglet de votre navigateur.

Exemple

Une configuration avec une ancre, une clé de fusion, une version sans guillemets et une version entre guillemets, et le JSON que renvoie l’outil :

YAML

defaults: &base
  retries: 3
  debug: no
prod:
  <<: *base
  host: example.com
  version: 1.10
  tag: "1.10"
  build: 0012

JSON

{
  "defaults": {
    "retries": 3,
    "debug": "no"
  },
  "prod": {
    "retries": 3,
    "debug": "no",
    "host": "example.com",
    "version": 1.1,
    "tag": "1.10",
    "build": 12
  }
}

Comment convertir du YAML en JSON

  1. 1Collez du YAML dans « Entrée YAML ».
  2. 2Cliquez sur « Convertir ».
  3. 3Lisez le JSON dans « Sortie JSON », ou l’erreur, avec sa ligne et sa colonne, si la syntaxe YAML est incorrecte.
  4. 4Cliquez sur « Copier » pour le presse-papiers, ou sur « Télécharger » pour obtenir un fichier data.json.

Formats et limites

Entrée
Texte YAML, un ou plusieurs documents
Sortie
JSON (indentation de 2 espaces), enregistré sous data.json
Non pris en charge
étiquettes personnalisées (!Ref, !Sub), !!binary, !!timestamp
Valeurs refusées
.inf et .nan, que JSON ne peut pas contenir

Usages courants

Lire des manifestes Kubernetes dans un script
Un fichier manifeste avec un Deployment, un Service et un Ingress séparés par --- devient un seul tableau JSON avec un élément par ressource, prêt pour jq ou pour un script qui ne lit que du JSON.
Voir ce que règle vraiment un fichier Compose
La conversion d’un docker-compose.yml qui réutilise &defaults avec << : *defaults écrit chaque service avec les clés fusionnées en toutes lettres : l’environnement, les ports et la politique de redémarrage finaux de chaque service se lisent donc directement.
Passer une configuration à un outil qui ne lit que du JSON
Une description OpenAPI ou un pipeline CI écrit en YAML devient du JSON pour un validateur, un client REST ou une bibliothèque qui n’accepte que du JSON, et les grands entiers sont conservés chiffre pour chiffre.

Quel outil choisir

  • JSON en YAML: le sens inverse ; il met entre guillemets simples les chaînes comme yes, 123 ou une date, pour qu’un lecteur YAML les garde comme texte.
  • TOML en JSON: pour les fichiers Cargo.toml et pyproject.toml ; il écrit les dates TOML sous forme de chaînes ISO 8601 et transforme inf et nan en null avec un avertissement, là où cet outil refuse .inf et .nan.
  • Formateur JSON: pour trier les clés du résultat de A à Z, passer à 4 espaces ou à une tabulation, ou le minifier, car cet outil écrit toujours un JSON indenté de 2 espaces.

Où votre fichier est traité

js-yaml s’exécute dans votre navigateur pour lire le YAML, et le contenu que vous collez n’est pas envoyé : les fichiers de configuration qui contiennent des noms d’hôtes internes restent donc chez vous. Si une erreur se produit, son message, épuré des passages entre guillemets, est signalé à notre journal des erreurs, avec le nom de l’outil ainsi que le nom et la version de votre navigateur.

Questions fréquentes

Une version comme 1.10 est-elle conservée ?

Non, sauf si elle est entre guillemets. Sans guillemets, 1.10 est un nombre YAML et s’écrit 1.1 en JSON ; entre guillemets, elle reste la chaîne 1.10, comme dans l’exemple. De la même façon, 0012 devient 12.

Les valeurs yes et no sont-elles converties en booléens ?

Non. En YAML 1.2, que suit cet outil, seuls true et false sont des booléens (True et TRUE comptent aussi) : yes, no, on et off restent donc des chaînes. Écrivez true ou false si vous avez besoin de booléens.

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

Oui. Un alias comme *base copie la valeur de l’ancre, et << : *base fusionne ses clés dans le mappage, comme le font les fichiers Docker Compose et GitLab CI ; les clés écrites à côté de la fusion l’emportent.

Puis-je convertir un modèle CloudFormation ?

Non, pas un modèle qui utilise les étiquettes courtes. !Ref, !Sub et les autres étiquettes personnalisées arrêtent la conversion avec une erreur d’étiquette inconnue, tout comme !!binary et !!timestamp. Les modèles écrits sous la forme longue, comme Ref : MyBucket, se convertissent normalement.

Les commentaires YAML sont-ils conservés ?

Non. JSON n’a pas de commentaires : chaque commentaire # est donc supprimé, qu’il soit sur sa propre ligne ou après une valeur.

Que se passe-t-il quand une clé apparaît deux fois dans le même mappage ?

La conversion s’arrête avec une erreur de clé en double dans le mappage, avec sa ligne et sa colonne, au lieu de garder l’une des deux valeurs sans prévenir. Supprimez ou renommez l’une des deux clés, puis convertissez de nouveau.

Pourquoi une erreur parle-t-elle de tabulations ?

YAML n’accepte pas les tabulations dans l’indentation. Remplacez-les par des espaces ; l’erreur indique la ligne et la colonne de la première tabulation trouvée.

Comment les chaînes multilignes | et > sont-elles converties ?

Un bloc | garde ses sauts de ligne et un bloc > joint ses lignes par des espaces ; les deux deviennent une seule chaîne JSON terminée par un seul saut de ligne, comme line one line two .

Que deviennent une valeur vide et ~ ?

null. Une clé sans rien après son deux-points, ~ et null donnent tous un null JSON, et un document qui ne contient que des commentaires est lui aussi converti en null.