JSON in YAML
Per Kubernetes, Compose e file di CI, senza mandare la tua configurazione da nessuna parte.
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.