1. Introduzione
Se almeno una volta avete aperto API moderne, lavorato con web-service, app mobili o anche solo provato a salvare qualcosa in un "formato universale" — avete già incontrato o incontrerete il JSON. È quel formato che praticamente "collega" diversi linguaggi di programmazione e perfino piattaforme diverse: C#, JavaScript, Python — tutti parlano usando il JSON.
Perché proprio il JSON è diventato la star della serializzazione? La risposta è semplice: è un formato testuale compatto, leggibile dall'uomo e leggero. La sua popolarità è il risultato della combinazione di semplicità, universalità e ottimo supporto nei linguaggi di programmazione.
Che cos'è JSON?
JSON — è l'abbreviazione di JavaScript Object Notation. Il formato è nato dal mondo JavaScript, ma è rapidamente uscito dal browser per invadere il mondo. Importante: nonostante il nome, JSON non è legato a JavaScript e funziona altrettanto bene con tutti i linguaggi di programmazione.
Il formato è stato inventato all'inizio degli anni 2000 da Douglas Crockford come alternativa più semplice all'XML verboso. L'idea è semplice: «JSON è più corto, più semplice e più facile da leggere».
2. Regole fondamentali del formato JSON
La cosa principale: JSON è un formato testuale con regole rigorose per i dati strutturati. Niente magia, solo testo normale che si può aprire in qualsiasi editor.
Costrutti di base:
- Array (arrays): elenchi ordinati di valori.
- Oggetti (objects): insiemi di coppie chiave-valore.
- Tipi semplici: stringhe, numeri, valori booleani (true, false) e il valore speciale null.
Esempio di documento JSON minimale:
{
"name": "Ivan",
"age": 25,
"isStudent": true,
"scores": [5, 4, 5, 3],
"contacts": {
"email": "ivan@example.com",
"phone": null
}
}
Struttura schematica
Ecco una semplice tabella di corrispondenza tra i tipi in C# e la loro rappresentazione in JSON:
| Tipo C# | Esempio JSON |
|---|---|
|
|
|
|
|
|
| array (int[], ...) | |
| oggetto (class, ...) | |
|
|
Regole di scrittura del JSON
- Le stringhe sono sempre con virgolette doppie: 'text' — errore, corretto "text".
- Le chiavi degli oggetti sono stringhe tra virgolette doppie: per esempio, "name": ...
- Le virgole vanno solo tra gli elementi, senza virgola finale dopo l'ultimo elemento.
- Le indentazioni non sono obbligatorie, ma migliorano la leggibilità.
- I numeri senza virgolette: "age": 25, non "age": "25".
- I booleani sono true/false (senza virgolette), non True, FALSE o "true".
- null si scrive null (senza virgolette).
3. JSON visto dal punto di vista del programmatore
Analogie con i tipi C#:
- JSON-object ≈ Dictionary<string, object>
- JSON-array ≈ T[] o List<T>
- JSON-string ≈ stringa normale
- JSON-number ≈ int o double (a seconda del valore)
Esempio di serializzazione di un oggetto in JSON
Classe:
public class Student
{
public string Name { get; set; } = "";
public int Age { get; set; }
public bool IsStudent { get; set; }
public int[] Scores { get; set; } = Array.Empty<int>();
}
Il JSON risultante (semplifichiamo, i dettagli della serializzazione più avanti):
{
"Name": "Ivan",
"Age": 25,
"IsStudent": true,
"Scores": [5, 4, 5, 3]
}
4. Esempi di strutture JSON valide
Oggetto con array e oggetti annidati
{
"product": "Caffè",
"price": 125.50,
"inStock": true,
"attributes": {
"weight": 500,
"unit": "gr"
},
"tags": ["bevanda", "energia", "arabica"],
"promotions": null
}
Array di oggetti
[
{"id": 1, "name": "Petja"},
{"id": 2, "name": "Maša"},
{"id": 3, "name": "Vasja"}
]
5. Esempi di JSON non valido (e perché)
Virgolette singole:
{ 'name': 'Ivan' } // Errore!
JSON richiede le virgolette doppie.
Virgola dopo l'ultimo elemento:
{ "x": 1, "y": 2, } // Errore!
La virgola finale non è permessa.
Commenti:
{
// Questa bella cosa purtroppo non funziona in JSON
"name": "Ivan"
}
In JSON non esistono i commenti.
6. Perché JSON è utile nei progetti reali?
Trasferimento dati tra sistemi
JSON è il "linguaggio comune" universale tra programmi diversi, spesso sopra HTTP. Per esempio, un server in C# comunica con il frontend in JavaScript — il formato comune è il JSON.
Salvataggio di impostazioni e dati
Molte applicazioni salvano le impostazioni in file .json. Per esempio, appsettings.json è lo standard per le applicazioni .NET. Vantaggi: facile da leggere, modificare e versionare.
API server e mobile
La maggior parte delle REST API usa JSON come formato per richieste e risposte: per esempio, la lista degli utenti arriva come array di oggetti.
Configurazione di strumenti e librerie
Molti strumenti in .NET (Serilog, Swagger ecc.) usano JSON per le configurazioni. XML si vede sempre meno — JSON è più compatto e più chiaro.
7. Popolarità del JSON: perché tutti lo amano?
- Leggibilità. Anche chi non è un programmatore capisce la struttura.
- Comodità nel trasferimento in rete. Testo normale, poco "peso".
- Supporto in tutti i linguaggi. Serializzazione/deserializzazione spesso "out of the box".
- Comodo per le configurazioni. Qualsiasi editor ci lavora bene.
- Semplicità di generazione. Creare JSON è davvero facile.
- Array, annidamento, null. Tutto intuitivo, senza la "febbre delle parentesi" come con XML.
Quando è meglio scegliere JSON?
- State creando un'app mobile o web;
- Lavorate con API di servizi esterni;
- Volete rendere l'app facilmente integrabile in futuro.
8. Come C# lavora con JSON
Breve panoramica delle librerie .NET popolari:
- System.Text.Json — standard, veloce e semplice.
- Newtonsoft.Json (Json.NET) — il "veterano" con tantissime funzionalità.
Esempio minimo di serializzazione/deserializzazione:
using System.Text.Json;
// Convertiamo un oggetto in una stringa JSON
var student = new Student { Name = "Ivan", Age = 25, IsStudent = true, Scores = new[] {5, 4, 5, 3} };
string json = JsonSerializer.Serialize(student);
// E viceversa: leggiamo l'oggetto da una stringa JSON
Student? parsed = JsonSerializer.Deserialize<Student>(json);
Console.WriteLine(json);
9. Errori tipici dei principianti con JSON
Errore comune — confondere le virgolette o dimenticare una virgola. A volte si cerca di aggiungere commenti (come in C# — è comodo!), ma il JSON non li accetta.
Un altro caso frequente — serializzare oggetti con collezioni non inizializzate: si ottiene "scores": null invece dell'array atteso. Inizializzate sempre le collezioni.
Ricordate che JSON è testo: grandi volumi di dati occupano molta memoria. Se serializzate, ad esempio, 500 MB in JSON, l'applicazione può avere un calo significativo delle prestazioni.
GO TO FULL VERSION