JSON vs YAML: differenze e casi d'uso
JSON e YAML sono i due formati di serializzazione testuali più utilizzati per descrivere dati strutturati: configurazione di applicazioni, payload di API, file di infrastruttura, manifest Kubernetes, pipeline CI/CD. Entrambi rappresentano le stesse strutture fondamentali (oggetti, liste, scalari) ma con filosofie diverse: JSON privilegia la leggibilità macchina e l'universalità, YAML punta sulla leggibilità umana e sulla concisione. Questo articolo confronta i due formati punto per punto per aiutarti a scegliere.
Cos'è JSON?
JSON (JavaScript Object Notation) è un formato di serializzazione introdotto da Douglas Crockford all'inizio degli anni 2000, derivato dalla sintassi letterale di oggetto JavaScript. Standardizzato dalla RFC 8259 e da ECMA-404, è oggi il formato cardine del web: la quasi totalità delle API REST, dei database NoSQL e delle configurazioni frontend lo usa.
JSON si basa su due strutture:
- Una collezione ordinata di coppie chiave-valore (l'oggetto, tra parentesi graffe)
- Una lista ordinata di valori (l'array, tra parentesi quadre)
I valori scalari sono string, number, true,
false o null. Le stringhe sono obbligatoriamente racchiuse tra
virgolette doppie. JSON non supporta i commenti.
Cos'è YAML?
YAML (YAML Ain't Markup Language) è un formato apparso nel 2001, progettato fin dall'inizio per essere leggibile da un umano. La specifica attuale è YAML 1.2.2. La sua caratteristica distintiva: usa l'indentazione per esprimere la gerarchia, alla maniera di Python.
YAML è un sovrainsieme di JSON dalla versione 1.2: qualsiasi documento JSON valido è un
documento YAML valido. Ma YAML aggiunge molto: commenti, stringhe senza virgolette,
multi-linea, anchor e alias, tag per la tipizzazione esplicita, documenti multipli in uno
stesso file (---).
Sintassi a confronto
Ecco la stessa struttura espressa nei due formati.
JSON
{
"name": "cdrn",
"version": "1.14",
"tags": ["seo", "tools", "open-source"],
"author": {
"name": "Adrien",
"email": "contact@example.com"
},
"active": true,
"stars": null
}
YAML
# Configurazione progetto
name: cdrn
version: "1.14"
tags:
- seo
- tools
- open-source
author:
name: Adrien
email: contact@example.com
active: true
stars: null
Sullo stesso contenuto, YAML occupa più o meno lo stesso numero di righe ma evita parentesi
graffe, parentesi quadre, virgole finali e virgolette sulla maggior parte delle stringhe. I
commenti (righe #) sono ammessi.
Tipi supportati
JSON conosce 6 tipi: object, array, string,
number, boolean, null. Nessuna data nativa, nessun
binario, nessuna distinzione esplicita tra intero e float.
YAML 1.2 conosce gli stessi di JSON e aggiunge: timestamp ISO 8601, binari (codificati base64
tramite il tag !!binary), interi e float distinti, l'infinito, NaN, e tipi
personalizzati tramite tag (!!str, !!int, !!float...).
YAML 1.1 accettava yes/no/on/off come booleani: una trappola classica sui vecchi
parser.
Prestazioni ed ecosistema
JSON è tipicamente da 3 a 10 volte più veloce da parsare rispetto a YAML, e i suoi parser sono disponibili ovunque (integrati nel runtime della quasi totalità dei linguaggi). Le librerie YAML sono più pesanti perché gestiscono una grammatica più ricca (anchor, tag, multi-doc).
Lato ecosistema: JSON domina le API HTTP, i database NoSQL (MongoDB, CouchDB), i file
package.json, composer.json, tsconfig.json. YAML si è
imposto per la configurazione applicativa e l'infrastructure-as-code: Symfony, Spring Boot,
Rails, Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Tabella comparativa
| Criterio | JSON | YAML |
|---|---|---|
| Leggibilità umana | Buona | Eccellente |
| Leggibilità macchina | Eccellente | Corretta |
| Commenti | No | Sì (#) |
| Indentazione significativa | No | Sì |
| Velocità di parsing | Veloce | Più lenta |
| Tipi ricchi (data, binario) | No | Sì |
| Anchor / alias | No | Sì |
| Caso d'uso tipico | API, archiviazione, scambio dati | Configurazione, infra-as-code |
Casi d'uso tipici
Scegliere JSON quando
- Stai progettando un'API REST o un endpoint webhook
- Stai memorizzando dati in un database NoSQL o in una cache
- Stai scambiando dati tra frontend e backend
- La performance di parsing è critica (alto throughput, edge)
- Vuoi un formato universalmente supportato senza dipendenze
Scegliere YAML quando
- Stai scrivendo una configurazione applicativa modificata a mano
- Hai bisogno di commenti per documentare le opzioni
- Stai scrivendo Kubernetes, Docker Compose, GitHub Actions, Ansible
- Vuoi fattorizzare blocchi con anchor e alias
- La leggibilità ha la priorità sulla rapidità di elaborazione
Raccomandazione
La regola semplice: JSON per la macchina, YAML per l'umano. Se il tuo file è prodotto o consumato da un programma, prendi JSON. Se è scritto e riletto a mano, prendi YAML. Molti ecosistemi accettano entrambi: Symfony legge YAML, JSON e XML per le sue configurazioni, Kubernetes accetta entrambi per i suoi manifest. Nel dubbio, parti su YAML per la configurazione umana e JSON per i flussi automatizzati.
Puoi testare la conversione da un formato all'altro con il nostro convertitore JSON / YAML e formattare rapidamente un documento con il formattatore JSON.
Domande frequenti
YAML è più lento di JSON?
Sì, in regola generale, parsare un documento YAML costa diverse volte più CPU rispetto a parsare lo stesso documento JSON, perché la grammatica YAML è più ricca (indentazione, tag, anchor). In pratica, il divario è trascurabile per file di configurazione. Diventa sensibile quando si parsano decine di migliaia di documenti in ciclo.
Si può convertire automaticamente YAML in JSON?
Sì: qualsiasi documento YAML può essere convertito in JSON senza perdita se si evitano i tipi YAML specifici (timestamp, anchor). Il contrario è ancora più semplice, dato che JSON è un sottoinsieme di YAML 1.2. Il nostro convertitore fa entrambi i sensi.
JSON accetta i commenti?
No, lo standard JSON li vieta. Esistono dialetti (JSON5, JSONC) ma non sono universalmente supportati. Se hai bisogno di commenti, prendi YAML o TOML.
Perché Kubernetes usa YAML e non JSON?
I manifest Kubernetes sono scritti e riletti da umani. YAML offre i commenti, una sintassi meno rumorosa e la possibilità di fattorizzare tramite anchor. L'API Kubernetes accetta anche JSON, ma l'uso idiomatico resta YAML.
YAML è davvero un sovrainsieme di JSON?
Sì da YAML 1.2: qualsiasi documento JSON valido è un documento YAML valido. Questo permette di incorporare JSON in un file YAML senza modificarlo, il che è pratico per i blocchi generati o copiati-incollati.