CodeGym /Corsi /C# SELF /Fondamenti di sintassi e struttura

Fondamenti di sintassi e struttura JSON

C# SELF
Livello 47 , Lezione 0
Disponibile

1. Ricordiamo JSON

JSON sta per JavaScript Object Notation. Nonostante la parola minacciosa JavaScript nel nome, questo formato è totalmente language-neutral e amichevole con tutti (o quasi tutti) i linguaggi di programmazione, incluso C#. È stato creato per descrivere dati in modo comodo e leggibile — oggetti, array, liste e dizionari — come testo normale.

Nel mondo moderno, dove quasi ogni programma parla con altri programmi, JSON è diventato di fatto lo standard de-facto per serializzazione e scambio di dati strutturati. Lo trovi ovunque: dai REST API alla memorizzazione delle impostazioni utente e persino per la comunicazione interna tra microservizi. La ragione è semplice — è leggibile dall'uomo (se l'uomo non teme le parentesi graffe), facile da fare il parsing e supportato da tutti i linguaggi e librerie moderne.

Perché non XML?

JSON è più semplice, più corto e più leggibile di XML. Inoltre non ha rumore o tag superflui, si adatta meglio alle strutture dati della maggior parte dei linguaggi. E non devi preoccuparti di tag di chiusura, virgolette e tutta la burocrazia XML. Insomma — JSON è su più veloce, più semplice, più comodo.

2. Elementi principali della sintassi JSON

Immagina JSON come un albero semplice (o una matrioska), fatto di oggetti, array e dati elementari. Ecco i "mattoni" a nostra disposizione:

Oggetti (Objects)

Un oggetto JSON è un insieme di coppie "chiave: valore", racchiuso tra parentesi graffe { }.

Esempio:

{
  "name": "Alice",
  "age": 23
}

In C# questa struttura può essere rappresentata come una classe o un dizionario.

Array (Arrays)

Un array JSON è una lista ordinata di elementi (valori di qualsiasi tipo), racchiusa tra parentesi quadre [ ].

Esempio:

[1, 2, 3, 42]

O così:

[
  {"name": "Ivan"},
  {"name": "Olga"}
]

In C# — questo è List<T>, T[] e collezioni simili.

Coppie "chiave-valore"

Le chiavi sono sempre stringhe (con virgolette doppie!), e i valori possono essere di qualsiasi tipo consentito in JSON.

Esempio:

{
  "id": 123,
  "login": "student",
  "isActive": true
}

Tipi di dati in JSON

Tipo JSON Esempio Descrizione
Numero (Number)
10, -5, 3.14
Numero intero o decimale
Stringa (String)
"hello"
Sempre tra virgolette doppie
Booleano (Boolean)
true, false
Valore logico
null
null
Assenza di valore
Oggetto (Object)
{"a":1}
Dizionario o entità con campi
Array (Array)
[1,2,3]
Sequenza di valori

Esempio — tutto insieme:

{
  "id": 1,
  "name": "Bob",
  "scores": [10, 20, 30],
  "profile": {
    "email": "bob@mail.com",
    "phone": null
  },
  "isAdmin": false
}

Vedi quanto è compatto e logico descrivere un intero oggetto utente.

3. Regole di formattazione JSON

Le stringhe sono sempre tra virgolette doppie

Anche se ti viene voglia di mettere quelle singole, JSON non lo permette. Così — corretto:

{ "name": "Vera" }

Così — errore:

{ 'name': 'Vera' }

Le chiavi sono solo stringhe

A differenza di C#, dove la chiave di un dizionario può essere int o enum, in JSON la chiave è sempre una stringa:

{ "2025": "God C#", "favorite": true }

Niente virgole finali

Diversamente da alcune sintassi di C#, una virgola in più prima della parentesi di chiusura è un errore sintattico in JSON!

// ERRORE! (l'ultima virgola non è ammessa)
{
  "id": 10,
  "name": "Oleg",
}

Corretto:

{
  "id": 10,
  "name": "Oleg"
}

Spazi e ritorni a capo

Si possono usare per bellezza, i parser li ignorano. Di solito per il formato "per umani" si usa il JSON pretty-printed (formattato), per l'invio in rete si usa il minified (in una riga, senza spazi).

4. Come gli oggetti C# vengono convertiti in JSON

Se serializzi un oggetto usando System.Text.Json.JsonSerializer.Serialize(), i campi e le proprietà dell'oggetto diventano coppie "chiave-valore".

Esempio di classe C# e serializzazione

public class Book
{
    public string Title { get; set; }
    public int Pages { get; set; }
}
var book = new Book { Title = "CLR via C#", Pages = 900 };
string json = JsonSerializer.Serialize(book);
Console.WriteLine(json); // {"Title":"CLR via C#","Pages":900}

Collezioni

  • List<int> diventa [1,2,3]
  • string[] diventa ["hi", "wow"]
  • List<Person> — in un array di oggetti

Dizionari

Un dizionario del tipo Dictionary<string, int> diventa un oggetto:

var dict = new Dictionary<string, int>
{
    ["apples"] = 5, ["bananas"] = 10
};
string json = JsonSerializer.Serialize(dict);
// {"apples":5,"bananas":10}

5. Schema visivo: come si costruisce JSON

Annidamento — come una matrioska


Oggetto
│
├── Coppia: "name": "Alex"
├── Coppia: "hobbies": array
│               │
│               ├── "skiing"
│               └── "programming"
└── Coppia: "profile": oggetto
                 │
                 ├── "age": 42
                 └── "city": "Basilea"

Il risultato:

{
  "name": "Alex",
  "hobbies": ["skiing", "programming"],
  "profile": {
    "age": 42,
    "city": "Basilea"
  }
}

6. Errori comuni e particolarità della sintassi

In programmazione il mondo perfetto non esiste — anche in JSON ci sono delle trappole! Se provi a inviare JSON con virgolette sbagliate, virgole in eccesso o chiavi non racchiuse tra virgolette — il parser darà errore.

Un'altra "sorpresa" sono i numeri con zeri iniziali. In JSON questo è vietato (per esempio, 0123 — è un errore).

Buono a sapersi: Alcuni parser (per esempio il JavaScript JSON.parse) sono più permissivi e possono "perdonare" piccole irregolarità. Ma la maggior parte dei parser "severi" (per esempio in C# e .NET) si lamenterà al minimo problema di sintassi.

7. Esempi di conversione di dati C# in JSON

Proviamo a serializzare una struttura più complessa nella pratica. La nostra app didattica cresce: immaginiamo di avere una lista di studenti e di volerla salvare in un file JSON.

Definiamo la classe:

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Riempiamo la lista:

var students = new List<Student>
{
    new Student { Name = "Anna", Age = 20 },
    new Student { Name = "Nikita", Age = 22 }
};

Serializzazione:

using System.Text.Json;

// Serializziamo la lista di studenti in una stringa JSON
string json = JsonSerializer.Serialize(students, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);

/*
[
  {
    "Name": "Anna",
    "Age": 20
  },
  {
    "Name": "Nikita",
    "Age": 22
  }
]
*/

Vedi quanto è comodo? Ogni studente è un oggetto separato dentro l'array JSON.

8. Mini-generator: come scrivere JSON "a mano"

A volte serve scrivere JSON manualmente, per esempio per creare dati di test. Ecco una checklist:

  1. Parentesi graffe esterne — per un oggetto, parentesi quadre esterne — per un array.
  2. La chiave è sempre una stringa tra virgolette doppie.
  3. I valori possono essere stringhe (tra virgolette doppie), numeri, true, false, null, oggetto ({}), array ([]).
  4. Solo virgole tra gli elementi, mai dopo l'ultimo!
  5. Indentazione e spazi per leggibilità (ma non obbligatori).
2
Compito
C# SELF, livello 47, lezione 0
Bloccato
Serializzazione di una lista di oggetti in JSON
Serializzazione di una lista di oggetti in JSON
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION