JSON en YAML
Pour Kubernetes, Compose et les fichiers de CI, sans envoyer votre configuration ailleurs.
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.