YAML
1 tools
Formati di serializzazione dei dati
La serializzazione dei dati è il processo di conversione dei dati strutturati in un formato che può essere archiviato o trasmesso e poi ricostruito.
JSON, YAML, TOML e XML sono i quattro formati di serializzazione basati su testo dominanti nello sviluppo software.
JSON e YAML a confronto
JSON e YAML rappresentano lo stesso modello di dati. YAML è un superset rigoroso di JSON — qualsiasi documento JSON valido è anche YAML valido.
{
"server": {
"host": "localhost",
"port": 8080,
"debug": true
},
"database": {
"url": "postgres://localhost/mydb",
"pool": 10
}
}server: host: localhost port: 8080 debug: true database: url: postgres://localhost/mydb pool: 10
YAML usa l'indentazione invece di parentesi graffe e quadre, e omette le virgolette per la maggior parte dei valori stringa.
Confronto dei formati
| Formato | Leggibilità | Commenti | Array | Ideale per |
|---|---|---|---|---|
| JSON | ★★★☆☆ | Nessun commento | Nativo | API, scambio dati |
| YAML | ★★★★★ | Sì (#) | Nativo | File di config, IaC |
| TOML | ★★★★☆ | Sì (#) | Nativo | Config app (Rust, Python) |
| XML | ★★☆☆☆ | Sì (<!-- -->) | Elementi ripetuti | Documenti, SOAP, SVG |
Insidie di YAML
YAML è potente ma ha casi limite noti che sorprendono gli sviluppatori:
Il valore bare 'NO' viene interpretato come booleano false in YAML 1.1. Codici paese come NO (Norvegia), OFF, FALSE, N vengono tutti analizzati come false. Usa sempre le virgolette per le stringhe ambigue.
YAML usa l'indentazione per definire la struttura. Un spazio extra o una tabulazione può cambiare completamente il significato di un documento. Le tabulazioni sono vietate in YAML — solo spazi.
I valori che sembrano numeri, booleani o null vengono convertiti automaticamente. Usa le virgolette per i valori che vuoi mantenere come stringhe.
La specifica YAML vieta esplicitamente i caratteri di tabulazione per l'indentazione. Configura il tuo editor per usare spazi nei file YAML.
YAML ha due indicatori per le stringhe multi-riga: | (blocco letterale, mantiene le interruzioni di riga) e > (blocco ripiegato, le converte in spazi).
Ancore (&) e alias (*) YAML consentono il riutilizzo dei nodi, ma possono creare riferimenti circolari.
Funzionalità uniche di YAML
Commenti
YAML supporta i commenti con il carattere #. Questo è uno dei maggiori vantaggi pratici rispetto a JSON per i file di configurazione.
Ancore e alias
YAML consente di definire un nodo una volta con &nome-ancora e riutilizzarlo ovunque con *nome-ancora.
Stringhe multi-riga
YAML supporta scalari di blocco con due modalità: il blocco letterale (|) mantiene le interruzioni di riga; il blocco ripiegato (>) le converte in spazi.
Quando è necessario convertire
GitHub Actions, GitLab CI e CircleCI usano YAML nativamente. Quando si generano configurazioni pipeline a livello di codice, spesso è più facile costruire un oggetto JSON e convertirlo in YAML.
Le risorse Kubernetes sono definite in YAML, ma alcuni strumenti producono JSON. La conversione tra formati consente di ispezionare le risposte API.
Le API REST restituiscono JSON. Quando si alimentano questi dati in sistemi di configurazione basati su YAML, un convertitore colma il divario.
La migrazione da uno strumento all'altro spesso significa convertire il suo formato di configurazione.
Gli strumenti JSON Schema sono più maturi. Un pattern comune è creare la configurazione in YAML per la leggibilità e convertirla in JSON per la validazione.
Gli strumenti interni possono consumare configurazioni YAML mentre le API esterne richiedono JSON.
Domande frequenti
Sì. YAML 1.2 è un superset rigoroso di JSON — qualsiasi documento JSON valido è anche YAML valido.
YAML supporta i commenti, che JSON non ha. YAML è anche più compatto per le strutture profondamente annidate.
TOML è progettato per i file di configurazione con una sintassi chiara di tipo INI e tipi espliciti. È lo standard per Rust (Cargo.toml) e Python (pyproject.toml).
Raramente. JSON preserva l'ordine delle chiavi nella maggior parte dei parser. YAML supporta ancore e tag senza equivalenti JSON.
JSON.stringify converte i valori undefined in null negli array e li omette dagli oggetti.
Sì. Poiché YAML è un superset di JSON, puoi incorporare la sintassi JSON direttamente in un documento YAML.