Se scrivi codice da più di una settimana, quasi sicuramente ti sei già imbattuto in JSON. Salta fuori ovunque — risposte di API REST, file di configurazione, documenti di database, storage del browser, log. Ma cos'è esattamente, e perché è diventato il formato che ha divorato il web?

JSON sta per JavaScript Object Notation. Nonostante il nome, è completamente indipendente dal linguaggio e ha librerie in ogni principale linguaggio di programmazione. Douglas Crockford lo ha formalizzato nei primi anni 2000 come alternativa più semplice a XML per la comunicazione browser–server. La specifica è anche standardizzata come ECMA-404, ed è così piccola da stare su un biglietto da visita — il che è parte del motivo per cui ha vinto.

Com'è fatto davvero il JSON?

Ecco uno snippet JSON che rappresenta un oggetto utente. Questo singolo esempio copre tutti e sei i tipi di dato che JSON supporta:

json
{
  "name": "Alice",
  "age": 30,
  "score": 98.5,
  "active": true,
  "nickname": null,
  "tags": ["developer", "blogger"],
  "address": {
    "city": "Berlin",
    "country": "Germany"
  }
}

I sei tipi di dato di JSON

JSON supporta esattamente sei tipi di valore. Tutto qui. Questa semplicità è un vantaggio — puoi imparare l'intero formato in un pomeriggio.

json
{
  "string":  "Hello, world",
  "integer": 42,
  "float":   3.14159,
  "boolean": true,
  "nothing": null,
  "array":   [1, "two", false, null],
  "object":  { "nested": true }
}
  • String — Qualsiasi testo tra virgolette doppie. "hello", "2024-01-01", "" sono tutte stringhe valide.
  • Number — Intero o virgola mobile. Nessuna distinzione tra int e float. Nota: NaN e Infinity non sono numeri JSON validi.
  • Booleantrue o false, solo in minuscolo.
  • Null — Rappresenta "nessun valore". Utile per campi opzionali non ancora impostati.
  • Array — Una lista ordinata di valori. Può mescolare tipi: [1, "two", true, null] è perfettamente legale.
  • Object — Un insieme di coppie chiave–valore. Le chiavi devono essere stringhe tra virgolette doppie.

Una risposta API del mondo reale

Ecco come potrebbe essere una vera risposta di un'API REST quando chiami GET /api/users/42. Nota come annida oggetti e array per rappresentare dati più ricchi:

json
{
  "id": 42,
  "username": "alice_dev",
  "email": "[email protected]",
  "createdAt": "2023-06-15T09:30:00Z",
  "preferences": {
    "theme": "dark",
    "notifications": true,
    "language": "en"
  },
  "roles": ["user", "editor"],
  "lastLogin": "2024-01-10T14:22:00Z",
  "stats": {
    "postsPublished": 27,
    "commentsWritten": 154,
    "likesReceived": 489
  }
}

Potresti accedere alla preferenza del tema di alice_dev in JavaScript con user.preferences.theme, o ottenere il suo primo ruolo con user.roles[0]. Questa corrispondenza naturale con le primitive del linguaggio è esattamente il motivo per cui lavorare con JSON risulta così immediato.

Regole di sintassi JSON — le trappole che fregano tutti

JSON sembra semplice ma ha alcune regole rigide. Sbagliane una e l'intero payload non si parsifica. Questi sono gli errori che vedo più spesso:

  • Le chiavi devono stare tra virgolette doppie. {"name": "Alice"} è valido. {name: "Alice"} no. Questo frega gli sviluppatori che vengono da JavaScript, dove le chiavi degli oggetti senza virgolette vanno bene.
  • Niente virgole finali. {"a": 1, "b": 2,} genererà un errore di parsing. JavaScript qui è permissivo; la spec JSON no.
  • Niente commenti. I commenti // o /* */ non esistono in JSON. Se ti servono file di config con commenti, valuta YAML o TOML.
  • Niente undefined. L'undefined di JavaScript non esiste in JSON. Usa null per i valori mancanti.
  • Le stringhe devono usare virgolette doppie. Stringhe con apici singoli come {'key': 'value'} sono JSON non valido.
  • Niente zeri iniziali. 042 non è valido. 42 o 0.42 vanno bene.
Dritta da pro: Se incolli JSON da qualche parte e ti becchi un errore di parsing, il colpevole è quasi sempre uno di questi: una virgola finale, chiavi con apici singoli, o un commento vagante. Incollalo in un Validatore JSON per individuare la riga esatta che sta causando il problema.

Perché JSON ha conquistato il web

Prima di JSON, XML era il re. Una tipica risposta di API XML era verbosa, richiedeva un vero parser XML, e ti faceva sentire come se stessi lavorando contro il linguaggio. JSON poteva essere parsificato dal JSON.parse() nativo di JavaScript — senza bisogno di librerie. Era più leggero in rete, leggibile al volo, e si mappava direttamente sugli oggetti e array che gli sviluppatori usavano già tutti i giorni.

Verso la fine degli anni 2000, la maggior parte delle API pubbliche ha iniziato a offrire JSON accanto a XML. All'inizio degli anni 2010, molte hanno abbandonato del tutto il supporto a XML. Oggi, l'assunzione di default per qualsiasi API REST è JSON. Persino GraphQL, che ha sostituito REST in molti contesti, usa ancora JSON come formato di risposta.

JSON si definisce anche per ciò che non supporta

Alcune limitazioni di JSON sono scelte di progettazione intenzionali che lo mantengono semplice e interoperabile:

  • Nessun tipo data. Le date sono solo stringhe. La convenzione è il formato ISO 8601: "2024-01-15T09:30:00Z".
  • Nessun dato binario. File e immagini vengono tipicamente codificati in Base64 dentro una stringa.
  • Nessun valore funzione. {"fn": function(){} } non è valido. JSON è puro dato, mai codice.
  • Nessuna chiave duplicata. Tecnicamente permesso dalla spec, ma il comportamento è indefinito. In pratica, i parser prendono l'ultimo valore.

Strumenti utili per lavorare con JSON

Ecco alcuni strumenti che userai in continuazione lavorando con JSON: JSON Formatter per formattare risposte minificate, JSON Validator per trovare errori di sintassi, JSON Minifier per comprimere JSON in produzione, e JSON Path per interrogare dati profondamente annidati senza scrivere cicli.

La spec ufficiale vive su json.org e vale davvero la lettura — ci vogliono circa 10 minuti e capirai il formato per intero. La spec formale IETF è la RFC 8259 se mai ti servisse per chiudere un dibattito.

Tiriamo le somme

JSON è un formato di dati leggero e leggibile dagli umani costruito su sei tipi di valore: stringhe, numeri, boolean, null, array e oggetti. Ha regole di sintassi rigide ma nessuna sorpresa una volta che le conosci. Il motivo per cui è diventato onnipresente non è perché sia il formato più potente — è perché è il più semplice che copre il 95% delle esigenze reali sui dati. Se stai costruendo qualcosa legato al web, capire JSON non è opzionale. È fondamentale.