Sintassi
Regole
{ }Oggetto (coppie chiave-valore non ordinate)
[ ]Array (lista ordinata di valori)
"key": valueLe chiavi devono essere stringhe con virgolette doppie
No virgola finaleL'ultimo elemento non deve avere la virgola
Nessun commentoJSON non ammette commenti
Esempio Minimale
{ "name": "Alice", "age": 30, "active": true }
Tipi di Dato
Sei Tipi di Valore
"string"Testo UTF-8 con virgolette doppie
42 / 3.14Numero (intero o floating point)
true / falseBooleano
nullNull (assenza di valore)
{ }Oggetto
[ ]Array
Sequenze di Escape nelle Stringhe
\"Virgolette doppie
\\Backslash
\n \tA capo, tabulazione
\uXXXXEscape Unicode (esadecimale)
Oggetti
Sintassi degli Oggetti
{ "id": 1, "name": "Widget", "tags": ["new", "sale"] }
Regole
ChiaviDevono essere stringhe univoche con virgolette doppie
ValoriQualsiasi tipo JSON valido
OrdineL'ordine delle chiavi non è garantito
AnnidamentoGli oggetti possono contenere altri oggetti
Array
Sintassi degli Array
[1, "two", true, null, {"key": "val"}]
Array a Tipi Misti
{ "matrix": [[1, 2], [3, 4]], "empty": [] }
Regole
OrdinatoGli elementi mantengono l'ordine di inserzione
Tipi mistiGli elementi dell'array possono essere di tipi diversi
IndicizzazioneBasata su zero (nella maggior parte dei linguaggi)
Annidamento
Struttura Annidata
{ "user": { "name": "Alice", "address": { "city": "Boston" }, "scores": [95, 88, 72] } }
Pattern di Accesso
obj.user.nameNotazione a punto (JavaScript)
obj["user"]["name"]Notazione con parentesi
obj.user.scores[0]Indice array dentro un oggetto annidato
Validazione dello Schema
Esempio di Schema JSON
{ "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["name"] }
Parole Chiave dello Schema
typestring, number, integer, boolean, object, array, null
requiredArray di nomi di proprietà obbligatorie
propertiesDefinisce le proprietà attese dell'oggetto
enumLimita a un insieme fisso di valori
minLength / maxLengthVincoli sulla lunghezza delle stringhe
minimum / maximumVincoli sull'intervallo dei numeri
Basi di jq
Filtri Comuni
.Identità — passa l'input invariato
.keyAccede a una chiave dell'oggetto
.key.nestedAccede a una chiave annidata
.[0]Primo elemento dell'array
.[]Itera tutti gli elementi dell'array
select(.age > 20)Filtra per condizione
map(.name)Trasforma ogni elemento
lengthLunghezza dell'array o stringa
keysChiavi dell'oggetto come array
Esempi jq
echo '{"a":1}' | jq '.a' # 1 echo '[1,2,3]' | jq 'map(. * 2)' # [2,4,6] cat data.json | jq '.users[].name' cat data.json | jq '.[] | select(.active)'
Pattern Comuni
Risposta API
{ "status": 200, "data": [{"id": 1, "name": "Alice"}], "meta": {"total": 42, "page": 1} }
File di Configurazione
{ "host": "localhost", "port": 8080, "debug": false, "features": ["auth", "logging"] }
Suggerimenti
ValidaUsa jsonlint o python -m json.tool
Formattajq . file.json o python -m json.tool
JSONLUn oggetto JSON per riga (newline-delimited)
JSON5 / JSONCEstensioni che ammettono commenti e virgola finale