Vai al contenuto principale
CuteJSON
↑↓ Naviga Enter Seleziona Esc Chiudi

JSON vs YAML: differenze e quando usare ognuno

Pubblicato 4 min di lettura Di Akash Kinkar Pandey

YAML e un sovra-insieme del modello di dati di JSON: ogni documento JSON valido e anche YAML valido, parola per parola. La differenza non e cosa ogni formato puo rappresentare, ma come ciascuno viene scritto e quanto ognuno e comodo da modificare a mano.

Gli stessi dati, due modi

{
  "name": "web-app",
  "version": "1.0.0",
  "scripts": { "build": "vite build", "test": "vitest" },
  "dependencies": ["react", "vite"]
}
name: web-app
version: 1.0.0
scripts:
  build: vite build
  test: vitest
dependencies:
  - react
  - vite

Stesso documento, stessi dati una volta analizzati. YAML elimina le parentesi graffe, le parentesi quadre, le virgolette attorno alle stringhe semplici e la maggior parte delle virgole, e usa l indentazione per mostrare l annidamento al posto loro.

Dove differiscono davvero

Commenti. YAML li ha, # cosi. JSON non ne ha nessuno, per progetto; un file di configurazione .json con una spiegazione accanto a un impostazione deve mettere quella spiegazione da un altra parte, di solito in un README, perche il parser rifiutera una riga con // o # senza esitazione. Questa e gia la ragione per cui la configurazione mantenuta a mano (pipeline CI, Docker Compose, manifesti Kubernetes) usa YAML di default: la persona che la modificher tra un anno ha bisogno di sapere perche un impostazione e cosi come e, e un commento e l unico posto che sopravvive accanto al valore.

Sensibilita agli spazi. L indentazione di YAML e strutturale, allo stesso modo di quella di Python. Due spazi invece di quattro, o una tabulazione dove si aspettava uno spazio, cambia cosa il documento significa o lo rompe immediatamente, e il messaggio di errore per una cattiva indentazione e spesso meno specifico del “token imprevisto alla riga 4, colonna 12” di un parser JSON. Le parentesi graffe e quadre di JSON sono esplicite, quindi l indentazione e solo cosmica, il che e parte della ragione per cui JSON e il formato che le macchine generano e consumano: uno script non si preoccupa della leggibilita e preferisce delimitatori senza ambiguita.

Piu modi di scrivere lo stesso valore. YAML ha un scalare semplice, una stringa tra virgolette singole, una stringa tra virgolette doppie, scalari di blocco per il testo multi-linea, ancore e alias per ripetere un valore per riferimento, e alcune conversioni di tipo implicite (yes e no venivano analizzati come booleani in YAML 1.1, che e esattamente il tipo di sorpresa che ha reso il “problema della Norvegia”, un codice paese NO letto come falso booleano, un noto trucco di YAML). JSON ha un modo di scrivere una stringa, un modo di scrivere un numero, e nessuna conversione implicita. Meno modi di scrivere la stessa cosa significano meno modi di scriverla male, il che e il vero argomento per JSON in un carico utile macchina-a-macchina.

Dimensione a parte verbosita e commenti. Una volta rimossi gli spazi, JSON e YAML si comprimono a dimensioni paragonabili per gli stessi dati; il vantaggio di YAML e la leggibilita quando viene modificato da una persona, non il conteggio grezzo dei byte.

Quando usare ognuno

  • JSON per tutto quello che un programma genera e un altro programma consuma senza che un umano lo legga nel mezzo: carichi API, scambio di dati, qualsiasi cosa serializzata e deserializzata nello stesso ciclo richiesta-risposta.
  • YAML per tutto quello che una persona modifica regolarmente a mano e ha bisogno di commenti o stringhe multi-ligne per restare manutenibile: configurazione CI, manifesti Kubernetes, file di configurazione delle applicazioni che arrivano con documentazione in linea.

Molti strumenti accettano entrambi e convertono internamente, il che e generalmente piu utile che scegliere un lato permanente: scrivete la configurazione nel formato che le persone che la mantengono preferiscono, e convertite in JSON nel punto in cui qualcos altro ha bisogno di consumarla programmaticamente.

Conversione tra i due

Il Convertitore JSON in YAML funziona in entrambe le direzioni: scrive correttamente ancore, alias e flussi multi-documento invece di appiattire tutto in scalari semplici, e leggendo YAML di nuovo mette tra virgolette qualsiasi cosa non farebbe il ciclo completo come il tipo con cui e iniziato (una stringa di versione come "1.0" rimane una stringa, non il numero 1). Nulla di cio che convertite viene caricato; la conversione avviene nel vostro browser come ogni strumento di questo sito.

Torna a tutti i post