1. Che cos’è JSON (JavaScript Object Notation)?
JSON (si pronuncia «jason», non «zheson»!) sta per JavaScript Object Notation. Nonostante la parola «JavaScript» nel nome, JSON è un formato universale, supportato praticamente da tutti i linguaggi di programmazione, inclusa Java.
JSON è stato ideato da Douglas Crockford all’inizio degli anni 2000 come modo semplice di scambiare dati tra browser e server. Prima di allora prevaleva XML — prolisso e sovraccarico di tag.
JSON si è rivelato più compatto, più semplice e facile da leggere a colpo d’occhio. È rapidamente diventato lo standard de facto per lo scambio di dati tra client e server, soprattutto nel web e nelle app mobili.
Perché JSON è diventato lo standard?
- Semplicità della sintassi — facile da scrivere e leggere a mano.
- Compattezza — niente tag superflui né fronzoli.
- Leggibilità — anche un non tecnico capisce cosa succede.
- Facilità di parsing — la maggior parte dei linguaggi dispone di librerie integrate/di terze parti.
- Interoperabilità tra linguaggi — Java, Python, Kotlin ecc.: JSON è supportato da tutti.
- Standard per le REST API — la stragrande maggioranza delle API restituisce JSON.
Confronto con XML
| JSON | XML | |
|---|---|---|
| Leggibilità | Molto alta | Media (molti tag) |
| Dimensione | Compatto | Più ingombrante |
| Parsing | Semplice | Richiede più sforzo |
| Estendibilità | Supporta annidamento | Supporta annidamento |
| Rigorosità | Meno formale | Permette di descrivere schemi |
| Popolarità (2020+) | Molto alta | Usato, ma meno spesso |
JSON vince quasi in tutti i punti. Tuttavia XML rimane attuale dove servono schemi complessi, tipizzazione rigorosa, validazione tramite XSD, supporto di commenti e attributi — ad esempio in sistemi legacy e software bancario.
In pratica, se non scrivete software per una banca o per un’astronave, — usate JSON.
2. Sintassi di base di JSON
Se avete già lavorato con oggetti JavaScript o con dizionari in altri linguaggi, la sintassi vi sembrerà familiare. In Java non esiste un «dizionario» diretto, il suo ruolo è svolto dalle collezioni di java.util, in primo luogo Map<K, V> (più spesso — HashMap<K, V>).
Elementi principali
- Oggetti — insieme di coppie «chiave: valore», racchiuse tra { }.
- Array — elenchi ordinati di valori, racchiusi tra [ ].
Esempio di oggetto:
{
"name": "Alice",
"age": 25
}
Esempio di array:
[1, 2, 3, 4, 5]
Esempio di oggetto con array:
{
"students": [
"Ivan",
"Maria",
"John"
]
}
Tipi di valori consentiti
In JSON si possono usare solo i seguenti tipi di dati:
| Tipo | Esempio | Descrizione |
|---|---|---|
| Stringa | |
Sempre tra doppi apici |
| Numero | |
Interi e decimali |
| Booleano | |
Valori logici |
| null | |
«Vuoto», assenza di valore |
| Oggetto | |
Insieme di coppie «chiave: valore» |
| Array | |
Elenco di valori |
Attenzione: le chiavi negli oggetti sono sempre stringhe tra doppi apici, per esempio "name". Gli apici singoli non sono ammessi.
Esempi di JSON valido
{
"id": 1,
"name": "Bob",
"active": true,
"scores": [10, 20, 30],
"profile": {
"email": "bob@example.com",
"phone": null
}
}
Esempio di JSON non valido (errori)
{
name: 'Bob', // Errore: chiavi e stringhe — solo tra doppi apici!
age: 25,
}
3. Struttura dei dati: annidamento di oggetti e array
JSON supporta un annidamento profondo: oggetti in oggetti, array in oggetti, oggetti in array ecc. È come una matrioska.
Esempio di documento JSON complesso
{
"university": "Java University",
"students": [
{
"name": "Ivan",
"age": 20,
"courses": ["Math", "Java", "English"]
},
{
"name": "Maria",
"age": 19,
"courses": ["Biology", "Java", "Art"]
}
],
"active": true
}
Nell’oggetto radice ci sono il campo stringa "university", il campo booleano "active" e l’array "students", che contiene oggetti studente.
Schema visivo (schema a blocchi)
{
"chiave": valore,
"array": [
{ "chiave": valore },
{ "chiave": valore }
],
"oggetto": {
"chiave": valore
}
}
4. Vantaggi di JSON
Perché JSON è così popolare?
- Facile da leggere per umani e macchine — la struttura è immediata.
- Compattezza — minimo di caratteri superflui.
- Semplicità di parsing — molte librerie per lettura/scrittura.
- Standard per REST API e app mobili — utilizzato ovunque.
- Flessibilità — descrive sia elenchi semplici sia strutture ad albero.
- Config, impostazioni, archiviazione dati — spesso usato nei file di configurazione.
- Supporto in tutti i linguaggi — Java, Python, Go, Rust ecc.
5. Pratica: analisi di esempi di file JSON
Esempio 1: elenco di utenti
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
È un array in cui ogni elemento è un oggetto utente.
Esempio 2: configurazione di un’applicazione
{
"debug": true,
"maxConnections": 100,
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "qwerty"
}
}
Oggetto con oggetto annidato "database". Molto simile alle impostazioni reali delle applicazioni.
Esempio 3: errori in JSON
{
"name": "Alice",
"age": 25,
} // Errore: virgola superflua prima della parentesi di chiusura!
Ricordate: in JSON non si può mettere la virgola dopo l’ultimo elemento.
Esempio 4: chiavi senza doppi apici
{ name: "Alice", age: 25 } // Errore: le chiavi devono essere tra doppi apici!
6. Sfumature utili
Tabella: cosa si può e cosa non si può in JSON
| Si può | Non si può |
|---|---|
|
|
|
|
|
|
|
|
|
|
Confronto rapido tra JSON e oggetti Java
| Java | JSON |
|---|---|
|
Numero, true/false |
|
"stringa" |
| List<T>, array | [valore1, valore2, ...] |
|
{ "chiave": valore, ... } |
|
null |
| Classe con campi | { "campo": valore, ... } |
Esempio: classe Java e sua rappresentazione JSON
public class Student {
public String name;
public int age;
}
{
"name": "Alice",
"age": 20
}
7. Errori tipici nel lavorare con JSON
Errore n. 1: apici singoli al posto dei doppi. JSON accetta solo doppi apici per chiavi e stringhe.
{ 'name': 'Alice' } // Errore!
Errore n. 2: virgola superflua. Non si può mettere la virgola dopo l’ultimo elemento.
{ "name": "Alice", } // Errore!
Errore n. 3: chiavi senza apici. Le chiavi devono sempre essere tra doppi apici.
{ name: "Alice" } // Errore!
Errore n. 4: numeri con zeri iniziali. Tali numeri non sono consentiti.
{ "age": 025 } // Errore!
Errore n. 5: uso di undefined. In JSON non esiste undefined, usare null.
{ "value": undefined } // Errore!
Errore n. 6: True/False con iniziale maiuscola. In JSON esistono solo true e false (minuscoli).
{ "active": True } // Errore!
GO TO FULL VERSION