Guida
Convertire YAML in JSON nel codice
Quando la conversione appartiene a uno script o a una fase di build anziché a una scheda del browser, questi sono gli equivalenti.
Di yamltojsonfree · Pubblicato il · Aggiornato il
Python, Node.js, Go e la riga di comando
Ogni frammento legge input.yaml e stampa JSON formattato. Non sono però intercambiabili — la nota sotto ciascuno dice quale versione di YAML implementa quella libreria, e quella differenza può cambiare i tuoi dati in silenzio.
Python
import json, yaml
with open("input.yaml") as f:
data = yaml.safe_load(f) # safe_load, never load()
print(json.dumps(data, indent=2))PyYAML implementa YAML 1.1, quindi qui no diventa False — a differenza dello strumento nel browser, che usa 1.2 di default.
Node.js
import { readFileSync } from "node:fs";
import { load } from "js-yaml";
const data = load(readFileSync("input.yaml", "utf8"));
console.log(JSON.stringify(data, null, 2));js-yaml v5 usa YAML 1.2 di default — lo stesso motore e le stesse impostazioni dello strumento di questo sito.
Go
import (
"encoding/json"
"os"
"sigs.k8s.io/yaml"
)
in, _ := os.ReadFile("input.yaml")
out, _ := yaml.YAMLToJSON(in)
os.Stdout.Write(out)sigs.k8s.io/yaml converte tramite i tag JSON, che è ciò che usa Kubernetes stesso.
Bash (yq)
# Single document
yq -o=json input.yaml
# Multi-document into a JSON array
yq -o=json -I=2 'select(document_index >= 0)' -N input.yaml
# Minified
yq -o=json -I=0 input.yamlQuesto è mikefarah/yq. L’altro yq (kislyuk) è un wrapper di jq con opzioni diverse.
Tre cose da fare bene in uno script
Usa il loader sicuro. In Python, yaml.load() senza un loader esplicito può costruire oggetti Python arbitrari da YAML con tag — cioè esecuzione di codice se l’input non è tuo. safe_load() analizza solo dati semplici, e non c’è quasi mai motivo di usare altro.
Conosci la tua versione di YAML. PyYAML legge YAML 1.1, quindi country: NO esce come False; js-yaml v5 e il parser Go in stile Kubernetes leggono 1.2, quindi la stessa riga resta una stringa. Una pipeline che converte con una libreria e valida con un’altra può contraddirsi da sola. L’elenco completo dei valori interessati è nella guida YAML 1.1 contro 1.2.
Gestisci i flussi multi-documento. L’output di Kubernetes e Helm è di solito composto da più documenti separati da ---. Un semplice load legge solo il primo e scarta il resto in silenzio — usa yaml.safe_load_all() in Python, loadAll() in js-yaml, oppure l’invocazione di yq mostrata sopra per ottenere ogni documento.
Oppure salta del tutto lo script
Per una conversione una tantum, il convertitore gratuito da YAML a JSON fa tutto quanto sopra nel browser: flussi multi-documento, anchor e merge key, modalità YAML 1.1 e 1.2, ed errori fissati alla riga esatta. Niente viene caricato — il parser gira interamente sul tuo computer.
Riferimenti
- PyYAML: caricare YAML — perché safe_load, mai load
- README di js-yaml — load, loadAll e opzioni di schema
- sigs.k8s.io/yaml — da YAML a JSON per Go con semantica Kubernetes
- Documentazione yq (mikefarah) — le opzioni -o=json, -I e -N usate sopra
- Specifica YAML 1.2.2 — la versione a cui punta la maggior parte dei parser moderni
Tutti gli strumenti
YAML in JSON
Converti YAML in JSON formattato o minificato, con errori sulla riga esatta.
ApriJSON in YAML
Trasforma JSON in YAML leggibile, controllando indentazione e ordine delle chiavi.
ApriValidatore YAML
Controlla la sintassi YAML e ricevi una spiegazione chiara.
ApriFormatter YAML
Riformatta YAML disordinato con indentazione coerente e commenti preservati.
Apri