Aller au contenu
jsonbeautifiers
Français

JSON en YAML

Pour Kubernetes, Compose et les fichiers de CI, sans envoyer votre configuration ailleurs.

JSON
YAML

Rien de ce que vous collez ne quitte votre navigateur. La liste d’autorisation connect-src en fait une garantie du navigateur plutôt qu’une promesse. Vérifiez-le vous-même

Convertissez du JSON en YAML pour des manifestes Kubernetes, des fichiers Docker Compose, des workflows GitHub Actions et tout ce qui préfère le format lisible.

Comme YAML est un sur-ensemble de JSON, cette conversion réussit toujours. C’est le sens inverse qui est intéressant.

Ce qui change et ce qui ne change pas

Chaque valeur JSON a un équivalent YAML, rien n’est donc perdu. Les objets deviennent des mappings, les tableaux des séquences, et les guillemets autour des clés et des chaînes simples disparaissent.

Les chaînes qui pourraient être prises pour autre chose gardent leurs guillemets. Cela inclut le mot no, le mot yes, tout ce qui ressemble à un nombre et tout ce qui ressemble à une date. Le générateur est volontairement prudent là-dessus, pour la raison exposée sur la page YAML en JSON.

Grands entiers

YAML dispose d’entiers à précision arbitraire, mais la valeur doit tout de même survivre à JavaScript en chemin. Un entier supérieur à 2^53-1 est écrit ici sous forme de chaîne entre guillemets afin qu’aucun chiffre ne soit perdu, et la conversion signale l’avoir fait. Émettre en silence un nombre arrondi serait pire.

Largeur de ligne

Le retour à la ligne automatique est désactivé par défaut. Les générateurs YAML coupent traditionnellement les longues chaînes à 80 colonnes, ce qui convient à de la prose et se révèle désastreux pour une URL, un blob base64 ou une ligne de commande, car la forme coupée est plus difficile à greper et à modifier. Une sortie non coupée est ce que veulent presque tous les utilisateurs.

How to do this in code

Convertir en code.

py Python

PyYAML trie les clés par défaut, ce qui réordonne discrètement un fichier de configuration que vous vouliez convertir fidèlement.

import json, yaml

data = json.loads(text)
out = yaml.safe_dump(
    data,
    sort_keys=False,        # default is True, which reorders your file
    default_flow_style=False,
    allow_unicode=True,     # otherwise é becomes an escape
    width=10**6,            # effectively no wrapping
)
sh Shell
# yq, the YAML counterpart to jq
yq -P eval . input.json > output.yaml

# Or via Python, with no extra install
python -c 'import sys,json,yaml; yaml.safe_dump(json.load(sys.stdin), sys.stdout, sort_keys=False)' < in.json
js JavaScript
import { dump } from 'js-yaml';

const yaml = dump(JSON.parse(text), {
  lineWidth: -1,    // no wrapping
  noRefs: true,     // no anchors and aliases in the output
});

Questions fréquentes

YAML est-il vraiment un sur-ensemble de JSON ?
YAML 1.2 l’est, par conception. Tout document JSON valide est du YAML valide. YAML 1.1 ne l’était pas tout à fait, une raison de plus pour laquelle la version compte.
Pourquoi certaines de mes chaînes sont-elles entre guillemets dans la sortie ?
Parce que sans guillemets elles seraient analysées comme autre chose. no, yes, on, off, true, null, un nombre nu et tout ce qui a une forme de date ont besoin de guillemets pour rester des chaînes dans au moins certains analyseurs YAML. Le générateur prend cette précaution pour vous.
Puis-je conserver mes commentaires en convertissant dans l’autre sens ?
Non. JSON n’a pas de syntaxe de commentaire : un fichier YAML commenté les perd définitivement sur le chemin vers JSON. C’est une porte à sens unique qu’il vaut mieux connaître avant de convertir un fichier de configuration que vous maintenez à la main.