Là où retirer les guillemets change la valeur
YAML décide seul du type d’une valeur sans guillemets, et c’est là que les accidents arrivent.
version: 1.10 est lu comme un nombre et devient 1.1 : le zéro final disparaît et la version ne désigne plus la même chose. zip: 01234 se transforme de même en le nombre 1234 et perd son zéro de tête. Codes postaux, matricules et numéros de téléphone doivent être écrits entre guillemets, sous la forme "01234".
Les valeurs comme 12:30, no, yes et on restent du texte dans cet outil. En revanche, les analyseurs qui suivent les anciennes règles, dont PyYAML et Ruby, lisent no comme faux : c’est ainsi que le code pays NO finit en false, un cas resté célèbre. Si la configuration traverse plusieurs outils, mettez aussi ces mots entre guillemets.
Règles d’indentation
N’indentez qu’avec des espaces. Une tabulation est une erreur de syntaxe. Si votre éditeur insère des tabulations, passez-le aux espaces pour les fichiers YAML.
Les éléments d’un même niveau doivent être alignés au caractère près. Une colonne d’écart et l’analyse échoue sur place. Cet outil indique la ligne et la colonne où il s’est arrêté.
Ancres et clés de fusion
&nom étiquette un bloc et *nom le recolle où il faut. En ajoutant <<:, ce bloc est versé dans une autre table.
defaults: &d
retry: 2
image: node
job:
<<: *d
script: test
Cet outil résout les clés de fusion : le JSON ressort donc avec retry et image à l’intérieur de job. Sans résolution, il resterait une clé littérale "<<", inutilisable par la suite. Cette syntaxe revient sans cesse dans les fichiers GitLab CI et Docker Compose.
Ce qui se perd en chemin vers JSON
Les commentaires disparaissent. JSON n’a pas de syntaxe de commentaire : convertir une configuration puis écraser l’original jette toutes les notes qu’on y avait laissées. Gardez l’original.
Les documents multiples ne passent pas non plus. Quand un fichier contient plusieurs documents séparés par ---, cet outil signale une erreur plutôt que d’émettre le premier en silence et de laisser les autres disparaître sans que personne le remarque. Découpez un manifeste Kubernetes à plusieurs documents et convertissez-les un par un.
Les dates deviennent du texte. YAML reconnaît la date comme un type ; JSON n’a pas d’équivalent.
Dans l’autre sens
En passant de JSON à YAML, la plupart des guillemets tombent et le résultat se lit bien mieux. Ils subsistent sur les chaînes commençant par un zéro et sur celles qui ressemblent à true, car les enlever là changerait le sens. Qu’ils restent est le comportement correct, pas un défaut de mise en forme.