JSON (JavaScript Object Notation) è un formato di testo leggero per archiviare e scambiare dati strutturati. Alimenta la stragrande maggioranza delle API web, la maggior parte dei file di configurazione e innumerevoli database. Se hai mai visto una risposta di un'API REST o aperto un file package.json, hai letto JSON. Questa guida spiega esattamente cos'è JSON, com'è fatto il formato e perché è diventato la lingua franca dello scambio di dati.
Cos'è JSON?
JSON sta per JavaScript Object Notation. È stato creato da Douglas Crockford agli inizi degli anni 2000 come alternativa più semplice all'XML per scambiare dati tra un server web e un browser. Nonostante il „JavaScript“ nel nome, JSON è indipendente dal linguaggio —— tutti i linguaggi principali includono un parser JSON integrato.
Il formato è definito da due standard internazionali: RFC 8259 dell'IETF (storia e modifiche chiave) ed ECMA-404 di Ecma International. Entrambi dicono la stessa cosa: JSON è una sequenza di caratteri Unicode che rappresenta uno tra sei tipi di dato, codificata in UTF-8.
I sei tipi di dato di JSON
JSON supporta esattamente sei tipi di valore. Capirli è la base per capire il formato JSON.
1. Oggetto (Object)
Una collezione non ordinata di coppie chiave–valore tra parentesi graffe. Le chiavi devono essere stringhe (tra virgolette doppie). I valori possono essere di qualunque tipo JSON.
{
"name": "Alice",
"age": 30,
"active": true
}2. Array
Una lista ordinata di valori tra parentesi quadre.
["apple", "banana", "cherry"]3. Stringa (String)
Una sequenza di caratteri Unicode racchiusa tra virgolette doppie. Gli apici singoli non sono JSON valido.
"Hello, world!"4. Numero (Number)
Un intero o un numero in virgola mobile. JSON non ha tipi separati per interi e float —— solo number. Niente virgolette, niente literal esadecimali, niente NaN o Infinity.
42
3.14
-7
1.5e105. Booleano (Boolean)
Esattamente true o false, in minuscolo. JSON non accetta True, False, yes, no, 1 o 0 come booleani.
true
false6. Null
Rappresenta l'assenza di valore. Si scrive null in minuscolo.
nullCos'è un file JSON? (e il formato .json)
Un file JSON (talvolta digitato come jason file) è un file di testo semplice che contiene un singolo valore JSON —— di solito un oggetto o un array. Il formato .json è semplicemente testo UTF-8 conforme alla RFC 8259, con l'estensione .json per convenzione. Essendo testo semplice, non serve un visualizzatore speciale.
Come aprire un file JSON (o .json): va bene qualunque editor di testo —— VS Code, Notepad, TextEdit, Sublime, nano. La stessa domanda compare in varie forme —— how to open json files, how to open a .json file, how do i open a json file, how do you open a json file o semplicemente open json file —— e la risposta è la stessa: aprilo come testo. Per una vista più leggibile, incolla il contenuto nel Visualizzatore JSON per un albero collassabile, o nello strumento JSON Fix per formattarlo. Su macOS e Windows, il doppio clic su un .json di solito lo apre nell'editor di testo predefinito; se prova ad aprirsi nel browser, clic destro e „Apri con“ per scegliere un editor. Non serve scompattare nulla —— i .json non sono archivi compressi.
Come creare un file JSON (anche cercato come „how to make a json file“): apri un editor di testo, scrivi un singolo valore JSON valido (un oggetto, array, stringa, numero, booleano o null) e salva con l'estensione .json. È tutto il processo —— nessun header, nessuna dichiarazione di schema, nessun marcatore di codifica obbligatorio oltre a UTF-8. I programmi lo leggono come JSON appena riconoscono l'estensione. Un piccolo json file example: { "name": "Ada", "active": true }.
Cos'è il formato JSON? (e la ricerca correlata why files are stored in json format): il formato JSON è un formato di testo piccolo e indipendente dal linguaggio per dati —— chiavi, valori, array e oggetti, con un insieme fisso di tipi literal. I file sono salvati in questo formato perché lo stesso documento può essere letto da Python, Go, Java, JavaScript, Rust e dai database senza traduzione —— JSON è il minimo comune denominatore per spostare dati strutturati tra sistemi.
// users.json
[
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "editor" }
]File JSON comuni che probabilmente hai già visto:
package.json—— metadati e dipendenze di un progetto Node.jstsconfig.json—— configurazione del compilatore TypeScriptsettings.json—— impostazioni utente di VS Codemanifest.json—— manifest di estensioni browser o PWA
Cos'è il formato di dati JSON?
Il formato di dati JSON ha alcune regole rigide che lo distinguono dal codice JavaScript che gli somiglia:
- Tutte le chiavi devono essere stringhe tra virgolette doppie.
{ name: "Alice" }è un literal di oggetto JavaScript, non JSON. - Le stringhe devono usare virgolette doppie.
{ "name": 'Alice' }non è JSON valido. - Niente virgole finali.
{ "a": 1, }non è JSON valido. - Niente commenti.
// commente/* block comment */non sono ammessi in JSON. - Niente
undefined. L'undefineddi JavaScript non ha equivalente JSON. Usanullal suo posto.
JSON vs XML: perché JSON ha vinto (xml vs json)
JSON è la stessa cosa di XML? No —— entrambi trasportano dati strutturati, ma i due formati sono distinti per forma, dimensione e macchinario. Prima dell'affermazione di JSON, XML era il formato standard di scambio dati. Gli stessi dati nei due:
<!-- XML -->
<user>
<name>Alice</name>
<age>30</age>
</user>
// JSON
{ "name": "Alice", "age": 30 }JSON è più compatto, più facile da leggere per gli umani e parseabile nativamente in JavaScript senza librerie di terze parti. Nella maggior parte dei casi —— risposte API, configurazione, messaggistica —— JSON richiede significativamente meno banda e meno codice di XML.
Dove si usa JSON
- API REST: l'header
Content-Type: application/jsoncontraddistingue praticamente ogni risposta moderna di API web. - File di configurazione:
package.json,tsconfig.json,.eslintrc.json, template AWS CloudFormation. - Database: PostgreSQL, MySQL, MongoDB e DynamoDB supportano memorizzare e interrogare colonne o documenti JSON nativamente.
- File di log: il logging strutturato (usando JSON Lines) rende i dati parseabili da macchine come Elasticsearch.
- Comunicazione tra processi: microservizi, code di messaggi (Kafka, RabbitMQ) e funzioni serverless usano JSON come formato di payload predefinito.
JSON nei database
La maggior parte dei database moderni può memorizzare e interrogare JSON direttamente, così un documento non deve vivere in uno store documentale separato per mantenere la struttura:
- PostgreSQL —— due tipi:
jsonconserva il testo esatto;jsonbconserva una rappresentazione binaria indicizzabile. Interroga con->/->>per i campi e@>per il containment; indicizza i percorsi caldi con un indice GIN sulla colonnajsonb. - MongoDB —— i documenti sono in stile JSON (BSON su disco). Indici per campo e pipeline di aggregazione complete lavorano direttamente sulla forma del documento.
- SQLite —— l'estensione JSON1 (integrata in SQLite moderno) fornisce
json_extract,json_eache colonne generate indicizzate a partire dai campi JSON. - MySQL —— un tipo di colonna
JSONnativo più espressioni di percorso eJSON_TABLEper fare join di valori JSON come righe.
Due promemoria pratici per tutti: gli interi grandi possono perdere precisione passando per il driver client, e la spec JSON non definisce un ordine canonico delle chiavi —— se ti servono confronti o hashing deterministici, usa RFC 8785 (JCS).
Errori JSON comuni
Anche gli sviluppatori esperti scrivono JSON non valido. Gli errori più comuni:
- Virgole finali dopo l'ultimo elemento
- Apici singoli invece di doppie
- Chiavi senza virgolette
- Commenti JavaScript dentro al JSON
- Valori in stile Python come
True,False,None
Se il tuo JSON non fa il parse, riparalo all'istante online —— lo strumento corregge automaticamente questi problemi e ti mostra esattamente cosa è cambiato.
Parsare JSON nel codice
Tutti i linguaggi principali includono il supporto JSON di serie:
// JavaScript
const obj = JSON.parse('{"name":"Alice","age":30}');
console.log(obj.name); // "Alice"
# Python
import json
obj = json.loads('{"name":"Alice","age":30}')
print(obj['name']) # Alice
# Go
import "encoding/json"
var obj map[string]interface{}
json.Unmarshal([]byte(`{"name":"Alice","age":30}`), &obj)Come leggere un file JSON in Python (o read json file in python): usa json.load(open('data.json')) per un percorso di file, o json.loads(text) quando il JSON è già una stringa. Entrambi lanciano json.JSONDecodeError su errori di sintassi.
La scelta di JSON su XML nei sistemi moderni di solito si riduce a byte sulla rete e supporto del parser —— tutti i linguaggi supportano JSON nativamente, mentre XML di solito richiede una libreria di terze parti.
Varianti comuni di JSON in cui ti imbatterai
JSON stretto è la base, ma ci sono alcuni dialetti strettamente correlati che ricorrono regolarmente:
- JSONC (JSON con commenti) —— JSON che permette commenti
//e/* */e virgole finali.tsconfig.jsone ilsettings.jsondi VS Code lo usano. I parser standard lo rifiutano; usa un parser consapevole di JSONC o rimuovi prima i commenti. - NDJSON / JSON Lines —— un valore JSON per riga, separati da
\n. Usato per log in streaming, dataset ML e API in bulk. Parsa ogni riga conJSON.parse, non l'intero file. - JSON Pointer (RFC 6901) —— una sintassi di percorso per indirizzare un valore dentro un documento, es.
/users/0/name. È il formato di percorso usato da JSON Patch e da$refdi JSON Schema.
Domande frequenti
Cosa significa JSON?
JSON sta per JavaScript Object Notation. Nonostante il nome, è indipendente dal linguaggio —— tutti i principali possono leggerlo e scriverlo —— ed è definito da RFC 8259 ed ECMA-404.
Quali sono i tipi di dato in JSON?
Sei: stringa, numero, booleano, null, oggetto e array. Niente tipo intero separato, niente tipo data, niente undefined. Vedi Esempi di formato JSON per ognuno in contesto.
JSON è la stessa cosa di un oggetto JavaScript?
No. JSON è un formato di testo con regole rigide (chiavi tra virgolette doppie, niente virgole finali, niente commenti); un literal di oggetto JavaScript è codice molto più permissivo. Vedi JSON vs oggetti JavaScript.
Come verifico che un JSON sia valido?
Fanne il parse con JSON.parse() (lancia su input non valido) o segui Come validare JSON e passalo a un validatore. Per imporre struttura e tipi, descrivilo con JSON Schema.
Strumenti per lavorare con JSON
- JSON Fix —— valida, ripara e formatta JSON non valido all'istante
- Cos'è JSON Schema? —— descrivi e valida la struttura dei dati JSON
- Come formattare JSON —— pretty-print in JavaScript, Python, riga di comando o browser
- Esempi di formato JSON —— esempi copiabili per ogni tipo di dato e pattern del mondo reale
- JSON Diff —— confronta due documenti JSON e vedi cosa è cambiato
- YAML in JSON —— converti configurazione YAML in formato JSON