Conversione da JSON a YAML: Una Guida Completa alla Migrazione
JSON e YAML rappresentano le stesse strutture dati con sintassi diverse. La conversione tra i due formati è semplice nella maggior parte dei casi, ma i casi limite riguardanti tipi, stringhe multilinea e commenti richiedono attenzione. Questa guida copre la mappatura completa tra i formati.
Mappatura della Sintassi
Oggetti / Mappings
JSON:
{
"database": {
"host": "localhost",
"port": 5432,
"name": "myapp"
}
}
YAML:
database:
host: localhost
port: 5432
name: myapp
Array / Sequenze
JSON:
{
"servers": ["web1", "web2", "web3"]
}
YAML:
servers:
- web1
- web2
- web3
Strutture Annidate
JSON:
{
"services": [
{
"name": "api",
"ports": [8080, 8443],
"env": {"NODE_ENV": "production"}
}
]
}
YAML:
services:
- name: api
ports:
- 8080
- 8443
env:
NODE_ENV: production
Converti istantaneamente con il nostro convertitore JSON to YAML.
Casi Limite da Tenere d'Occhio
1. Commenti
YAML supporta i commenti; JSON no. Quando converti YAML in JSON, tutti i commenti vengono persi:
# Questo commento andrà perso in JSON
database:
host: localhost # Anche questo
2. Stringhe Multilinea
YAML ha una potente sintassi multilinea che JSON non ha:
description: |
Questa è una stringa
multilinea che preserva
le interruzioni di riga.
In JSON, questo diventa:
{
"description": "Questa è una stringa\nmultilinea che preserva\nle interruzioni di riga.\n"
}
3. Ambiguità dei Tipi
YAML rileva automaticamente i tipi, il che può causare problemi:
version: 1.0 # Float, non stringa "1.0"
port: 080 # Ottale 64, non stringa "080"
country: NO # Booleano false, non stringa "NO"
In JSON, i tipi sono espliciti:
{
"version": "1.0",
"port": "080",
"country": "NO"
}
Quando converti JSON in YAML, aggiungi virgolette intorno ai valori che potrebbero essere interpretati erroneamente.
4. Valori Null
Entrambi supportano null, ma la sintassi è diversa:
value: null # Esplicito
value: ~ # Abbreviazione YAML
value: # Valore vuoto = null
{ "value": null }
5. Caratteri Speciali nelle Chiavi
Le chiavi JSON possono contenere qualsiasi carattere unicode. Le chiavi YAML con caratteri speciali necessitano di virgolette:
"content-type": "application/json" # Il trattino richiede virgolette
simple_key: value # L'underscore va bene
Conversione da Riga di Comando
Usando yq (processore YAML)
# JSON to YAML
yq -P input.json > output.yaml
# YAML to JSON
yq -o=json input.yaml > output.json
Usando Python
# JSON to YAML
python3 -c "import json, yaml, sys; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))" < input.json > output.yaml
# YAML to JSON
python3 -c "import json, yaml, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < input.yaml > output.json
Usando jq + yq insieme
# Elabora JSON, output come YAML
cat config.json | jq '.database' | yq -P
Quando Usare Ciascun Formato
| Criterio | JSON | YAML |
|---|---|---|
| Modifica umana | Più difficile (parentesi, virgole) | Più facile (sintassi pulita) |
| Parsing automatico | Più veloce | Più lento |
| Commenti | Non supportati | Supportati |
| Scambio dati | Standard (API) | Raro |
| Configurazione | Accettabile | Preferito |
| Rigidità | Rigido (positivo) | Flessibile (rischioso) |
Usa JSON per: comunicazione API, archiviazione dati, configurazioni generate automaticamente, ambienti browser.
Usa YAML per: configurazioni modificate manualmente, Docker Compose, Kubernetes, pipeline CI/CD, Ansible.
Per un confronto più approfondito, consulta il nostro articolo YAML vs JSON.
FAQ
YAML è un superset di JSON?
Sì, dalla versione YAML 1.2 (2009), ogni documento JSON valido è anche YAML valido. Un parser YAML può analizzare JSON direttamente. Tuttavia, il contrario non è vero — le funzionalità YAML come commenti, ancore e stringhe multilinea non hanno equivalente in JSON.
Quale è più veloce da analizzare, JSON o YAML?
JSON è significativamente più veloce da analizzare in praticamente tutti i linguaggi. I parser JSON sono più semplici perché il formato ha meno sintassi da gestire. Per i file di configurazione caricati una volta all'avvio, la differenza è trascurabile. Per l'elaborazione dati ad alto throughput, JSON è la scelta chiara.
Risorse Correlate
- Convertitore JSON to YAML — Converti tra i formati istantaneamente
- YAML vs JSON — Confronto dettagliato dei formati
- Tutorial Sintassi YAML — Impara YAML da zero