JSON (JavaScript Object Notation) è un formato di scambio dati basato su testo, fondato sulla sintassi degli oggetti JavaScript. È utilizzato ovunque: dalle API REST e file di configurazione all'archiviazione dei dati in database e applicazioni mobili. Secondo il sito ufficiale di JSON, il formato è indipendente dal linguaggio e supportato da praticamente tutte le piattaforme moderne. JSON è diventato lo standard de facto per il trasferimento di dati tra client e server.
Punti chiave
JSON è un formato testuale per rappresentare dati strutturati, basato sulla sintassi JavaScript. Nonostante le sue origini in JavaScript, il formato è completamente indipendente dal linguaggio — parser e serializzatori esistono per tutti i linguaggi di programmazione popolari.
La storia di JSON è iniziata nei primi anni 2000, quando Douglas Crockford ha estratto un sottoinsieme della sintassi JavaScript per lo scambio di dati. Nel 2013, il formato è stato standardizzato come ECMA-404, e successivamente come ISO/IEC 21778:2017. Il nome sta per JavaScript Object Notation.
Il principale vantaggio di JSON è la sua sintassi minimalista. Vengono utilizzati solo sei tipi per descrivere i dati: stringa, numero, booleano, null, array e oggetto. Questo è sufficiente per rappresentare qualsiasi struttura dati utilizzata nelle applicazioni.
La sintassi JSON è estremamente semplice: i dati sono rappresentati come coppie chiave-valore, dove la chiave è una stringa tra doppi apici e il valore è uno dei sei tipi di base. Gli oggetti sono racchiusi tra parentesi graffe, gli array tra parentesi quadre. Le stringhe devono usare doppi apici; gli apici singoli non sono consentiti.
I numeri in JSON possono essere interi o a virgola mobile, positivi o negativi, con notazione esponenziale. I valori booleani sono rappresentati dai letterali true e false, e l'assenza di valore da null. Gli array contengono un insieme ordinato di valori di qualsiasi tipo, inclusi array e oggetti annidati.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "supporto per annidamento"
}
}
| Tipo | Esempio | Descrizione |
|---|---|---|
| Stringa | “testo” |
Tra doppi apici, con sequenze di escape |
| Numero | 42 |
Intero, virgola mobile, esponenziale |
| Booleano | true |
true o false — senza apici |
| null | null |
Assenza di valore |
| Oggetto | {} |
Insieme non ordinato di coppie chiave-valore |
| Array | [] |
Elenco ordinato di valori |
JSON è il formato principale di scambio dati per le API REST nello sviluppo mobile e web. Il server invia JSON nel corpo della risposta, il client nel corpo della richiesta. L'intestazione Content-Type standard per JSON è application/json.
Le API REST moderne utilizzano JSON per trasmettere tutti i tipi di dati: da semplici elenchi a strutture annidate complesse con relazioni tra entità. Le librerie client (come Axios in JavaScript o Retrofit su Android) serializzano e deserializzano automaticamente JSON, liberando lo sviluppatore dall'analisi manuale.
Un importante vantaggio di JSON nelle API REST è la possibilità di trasferimento parziale dei dati (risposta parziale) tramite parametri di query, nonché il supporto di risorse annidate senza richieste aggiuntive al server.
Il parsing JSON su piattaforme mobili viene eseguito utilizzando strumenti integrati. Android utilizza Gson di Google o Moshi di Square, iOS utilizza il protocollo Codable con JSONDecoder. Ogni piattaforma fornisce strumenti convenienti per convertire JSON in oggetti nativi e viceversa.
Su Android, l'approccio popolare utilizza Gson o Moshi. Basta definire una classe dati con annotazioni @SerializedName e chiamare fromJson per la deserializzazione. La libreria mappa automaticamente i nomi dei campi JSON alle proprietà della classe.
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
Su iOS, viene utilizzato il protocollo integrato Codable con JSONDecoder. La struttura dati viene dichiarata come struct conforme a Codable, dopodiché JSON viene analizzato con una singola riga. JSONEncoder esegue la serializzazione inversa — converte un oggetto in JSON per l'invio al server.
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON e XML sono i due principali formati per trasmettere dati strutturati. JSON vince in semplicità e prestazioni, XML in rigore e validazione. La scelta tra loro dipende dai requisiti del progetto: le API REST utilizzano più spesso JSON, i documenti complessi con schemi utilizzano XML.
XML richiede tag di chiusura per ogni elemento, aumentando la dimensione dei dati di 2-3 volte rispetto a JSON. Allo stesso tempo, XML supporta spazi dei nomi, schemi XSD, attributi e trasformazione XSLT, rendendolo più potente per la gestione documentale e l'integrazione di sistemi aziendali.
| Caratteristica | JSON | XML |
|---|---|---|
| Sintassi | Minimalista, chiave-valore | Basata su tag, apertura e chiusura |
| Dimensione dati | Compatta | 2-3 volte maggiore di JSON |
| Tipi di dati | Sei tipi di base | Solo testo, tipi tramite schemi |
| Validazione | Non integrata, tramite JSON Schema | XSD — rigorosa e matura |
| Spazi dei nomi | Nessuno | Supporto completo dei namespace |
| Velocità di parsing | Alta | Inferiore a causa della complessità |
Gli esempi mostrano operazioni tipiche con JSON nello sviluppo mobile: parsing di risposte API, creazione di JSON per l'invio e elaborazione di strutture annidate. Comprendere questi schemi è essenziale per qualsiasi sviluppatore di applicazioni mobili.
In JavaScript, JSON.stringify converte un oggetto in una stringa JSON. Il secondo argomento può essere un array di chiavi per la serializzazione selettiva o una funzione di sostituzione. Il terzo argomento imposta il rientro per la formattazione.
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
In Kotlin con la libreria Moshi, gli oggetti JSON annidati vengono gestiti tramite classi dati annidate. L'annotazione @Json specifica il nome del campo JSON se differisce dal nome della proprietà della classe. Gli array sono rappresentati come List con il tipo dell'elemento.
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema è un linguaggio per descrivere la struttura di un documento JSON, simile a XSD per XML. Usando JSON Schema, è possibile specificare campi obbligatori, tipi di dati, intervalli di valori, pattern di stringhe e struttura annidata. La validazione dello schema rileva errori nei dati prima che vengano elaborati nell'applicazione.
JSON Schema è ampiamente utilizzato in OpenAPI (Swagger) per documentare le API REST, nei moduli di validazione dei dati di input e nei test. Il file dello schema è esso stesso un documento JSON, consentendo ai parser JSON standard di leggerlo. Esistono validatori online e librerie per tutti i linguaggi di programmazione popolari.
Nello sviluppo mobile, JSON Schema viene utilizzato per validare le risposte del server durante i test e per verificare i file di configurazione. Librerie come network-validator su Android e json-schema-validator consentono di incorporare la validazione direttamente nel processo di sviluppo, prevenendo errori nelle fasi iniziali.
Domande frequenti
JSON supporta sei tipi: stringa (tra doppi apici), numero (intero e a virgola mobile), booleano (true/false), null, oggetto (coppie chiave-valore in {}) e array (elenco di valori in []). Questo è sufficiente per qualsiasi struttura dati nelle applicazioni.
No, lo standard JSON non supporta i commenti. Se hai bisogno di commenti, usa JSON5 (JSON esteso) o aggiungi un campo di descrizione, ad esempio “_comment”: “spiegazione”. Alcuni strumenti, come VS Code, supportano i commenti nei file JSON di configurazione, ma si tratta di un'estensione non standard.
JSONB è un formato di archiviazione binario per JSON in PostgreSQL. A differenza del JSON testuale, JSONB è più veloce da elaborare, supporta l'indicizzazione (indici GIN) e garantisce l'unicità delle chiavi. Tuttavia, JSONB occupa più spazio su disco a causa dei metadati aggiunti.
Usa JSONLint (jsonlint.com) per una validazione rapida, JSON.parse() integrato in JavaScript con try-catch, o plugin IDE. La validazione include la verifica di apici corretti, chiusura delle parentesi e conformità dei tipi. Per schemi complessi, usa JSON Schema Validator.
Non c'è limite nella specifica JSON. In pratica, la dimensione è limitata dalla memoria del dispositivo e dalle capacità del parser. Per le applicazioni mobili, si raccomanda di non superare 1-2 MB per risposta e per dati grandi utilizzare la paginazione o lo streaming.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche