Vai al contenuto
jsonbeautifiers
Italiano

JSON in YAML

Per Kubernetes, Compose e file di CI, senza mandare la tua configurazione da nessuna parte.

JSON
YAML

Nulla di ciò che incolli lascia il tuo browser. L’allowlist connect-src ne fa una garanzia del browser anziché una promessa. Verificalo tu stesso

Converti JSON in YAML per manifest Kubernetes, file Docker Compose, workflow GitHub Actions e qualsiasi altra cosa che preferisca il formato leggibile.

Poiché YAML è un soprainsieme di JSON, questa conversione riesce sempre. La direzione interessante è quella opposta.

Che cosa cambia e che cosa no

Ogni valore JSON ha un equivalente YAML, quindi non si perde nulla. Gli oggetti diventano mapping, gli array diventano sequenze, e le virgolette attorno alle chiavi e alle stringhe semplici spariscono.

Le stringhe che potrebbero essere scambiate per altro mantengono le virgolette. Rientrano qui la parola no, la parola yes, tutto ciò che sembra un numero e tutto ciò che sembra una data. Il dumper è prudente su questo di proposito, per il motivo spiegato nella pagina YAML in JSON.

Interi grandi

YAML ha interi a precisione arbitraria, ma il valore deve comunque sopravvivere a JavaScript lungo la strada. Un intero sopra 2^53-1 viene scritto qui come stringa tra virgolette perché non si perda nessuna cifra, e la conversione dichiara di averlo fatto. Emettere in silenzio un numero arrotondato sarebbe peggio.

Larghezza di riga

L’a capo automatico è disattivato di default. I dumper YAML spezzano tradizionalmente le stringhe lunghe a 80 colonne, cosa accettabile per la prosa e pessima per una URL, un blob base64 o una riga di comando, perché la forma spezzata è più difficile da cercare con grep e da modificare. Un output non spezzato è ciò che vuole quasi chiunque.

How to do this in code

Convertire nel codice.

py Python

PyYAML ordina le chiavi per impostazione predefinita, riordinando di nascosto un file di configurazione che volevi convertire fedelmente.

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
});

Domande frequenti

YAML è davvero un soprainsieme di JSON?
YAML 1.2 lo è, per scelta progettuale. Qualunque documento JSON valido è YAML valido. YAML 1.1 non lo era del tutto, il che è un motivo in più per cui la versione conta.
Perché alcune delle mie stringhe escono tra virgolette?
Perché senza virgolette verrebbero lette come altro. no, yes, on, off, true, null, un numero nudo e qualsiasi cosa a forma di data hanno bisogno delle virgolette per restare stringhe in almeno alcuni parser YAML. Il dumper sta usando prudenza per conto tuo.
Posso tenere i commenti convertendo nell’altro verso?
No. JSON non ha una sintassi per i commenti, quindi un file YAML commentato li perde per sempre nel passaggio a JSON. È una porta a senso unico che conviene conoscere prima di convertire un file di configurazione che curi a mano.