← Tutti gli articoli

Cos'è JSON? Una guida completa al formato, alla sintassi e ai file JSON

JSON (JavaScript Object Notation) è il formato universale di scambio dati. Impara i sei tipi di dato, le regole grammaticali che rendono JSON stretto, dove si usano i file .json e come fare parsing di JSON in qualsiasi linguaggio.

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.5e10

5. Booleano (Boolean)

Esattamente true o false, in minuscolo. JSON non accetta True, False, yes, no, 1 o 0 come booleani.

true
false

6. Null

Rappresenta l'assenza di valore. Si scrive null in minuscolo.

null

Cos'è 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.js
  • tsconfig.json —— configurazione del compilatore TypeScript
  • settings.json —— impostazioni utente di VS Code
  • manifest.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.// comment e /* block comment */ non sono ammessi in JSON.
  • Niente undefined. L'undefined di JavaScript non ha equivalente JSON. Usa null al 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/json contraddistingue 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: json conserva il testo esatto; jsonb conserva una rappresentazione binaria indicizzabile. Interroga con -> / ->> per i campi e @> per il containment; indicizza i percorsi caldi con un indice GIN sulla colonna jsonb.
  • 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_each e colonne generate indicizzate a partire dai campi JSON.
  • MySQL —— un tipo di colonna JSON nativo più espressioni di percorso e JSON_TABLE per 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.json e il settings.json di 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 con JSON.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 $ref di 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