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.

JSON
{
  "server": {
    "host": "localhost",
    "port": 8080,
    "debug": true
  },
  "database": {
    "url": "postgres://localhost/mydb",
    "pool": 10
  }
}
YAML
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

FormatoLeggibilitàCommentiArrayIdeale per
JSON★★★☆☆Nessun commentoNativoAPI, scambio dati
YAML★★★★★Sì (#)NativoFile di config, IaC
TOML★★★★☆Sì (#)NativoConfig app (Rust, Python)
XML★★☆☆☆Sì (<!-- -->)Elementi ripetutiDocumenti, SOAP, SVG

Insidie di YAML

YAML è potente ma ha casi limite noti che sorprendono gli sviluppatori:

Il problema della Norvegia

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.

Sensibilità all'indentazione

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.

Coercizione implicita dei tipi

I valori che sembrano numeri, booleani o null vengono convertiti automaticamente. Usa le virgolette per i valori che vuoi mantenere come stringhe.

Le tabulazioni sono vietate

La specifica YAML vieta esplicitamente i caratteri di tabulazione per l'indentazione. Configura il tuo editor per usare spazi nei file YAML.

Modalità stringhe multi-riga

YAML ha due indicatori per le stringhe multi-riga: | (blocco letterale, mantiene le interruzioni di riga) e > (blocco ripiegato, le converte in spazi).

Loop di ancore/alias

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

Configurazione pipeline CI/CD

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.

Manifesti Kubernetes

Le risorse Kubernetes sono definite in YAML, ma alcuni strumenti producono JSON. La conversione tra formati consente di ispezionare le risposte API.

Elaborazione delle risposte API

Le API REST restituiscono JSON. Quando si alimentano questi dati in sistemi di configurazione basati su YAML, un convertitore colma il divario.

Migrazione della configurazione

La migrazione da uno strumento all'altro spesso significa convertire il suo formato di configurazione.

Flusso di validazione dello schema

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.

Scambio dati con le API

Gli strumenti interni possono consumare configurazioni YAML mentre le API esterne richiedono JSON.

Domande frequenti

YAML è un superset di JSON?

Sì. YAML 1.2 è un superset rigoroso di JSON — qualsiasi documento JSON valido è anche YAML valido.

Perché scegliere YAML invece di JSON per i file di configurazione?

YAML supporta i commenti, che JSON non ha. YAML è anche più compatto per le strutture profondamente annidate.

Cos'è TOML e quando usarlo?

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).

La conversione da JSON a YAML perde informazioni?

Raramente. JSON preserva l'ordine delle chiavi nella maggior parte dei parser. YAML supporta ancore e tag senza equivalenti JSON.

Cosa causa la comparsa di 'undefined' nell'output JSON?

JSON.stringify converte i valori undefined in null negli array e li omette dagli oggetti.

Posso usare JSON in un file YAML?

Sì. Poiché YAML è un superset di JSON, puoi incorporare la sintassi JSON direttamente in un documento YAML.