Nella notazione JSON gli oggetti sono rappresentati da coppie di chiavi e valori delimitate sintatticamente da parentesi graffe ("{}"). Le chiavi devono essere delle stringhe, mentre i valori devono essere associati ad un tipo di dato valido per JSON, ad esempio una stringa, un numero o un array; chiavi e valori andranno divisi dal simbolo dei due punti (":") mentre le coppie chiave/valore saranno separate tra loro da una virgola (",").
Per un rapido ripasso sulla struttura di un file JSON vi invito alla lettura di questo articolo.
Un semplice esempio di oggetti JSON potrebbe essere quindi il seguente:
{ "nome":"Homer", "anni":38, "capelli":null }
L’accesso agli oggetti è poi possibile tramite il simbolo del punto (".", secondo la regola della dot notation), in questo modo:
mySim = { "nome":"Homer", "anni":38, "capelli":null }
h = mySim.anni;
o sfruttando una sintassi che prevede di delimitare la chiave desiderata tramite parentesi quadre e apici ("[".."]", secondo la regola della bracket notation):
mySim = { "nome":"Homer", "anni":38, "capelli":null }
h = mySim["anni"];
Un caso particolare, ma non infrequente, è però quello in cui il valore o i valori di un oggetto JSON sono a loro volta degli oggetti JSON, caso per il quale dovremo parlare di oggetti annidati (Nested JSON Objects) e utilizzare una sintassi più articolata ma non complicata. Analizziamo un semplice esempio che rappresenta un’estensione di quanto già proposto:
mySim = {
"nome":"Homer",
"anni":38,
"capelli":null,
"figli": {
"primofiglio":"Bart",
"secondofiglio":"Lisa",
"terzofiglio":"Maggie"
}
}
Abbiamo quindi una chiave, "figli", associata a tre coppie chiave/valore che sono 3 oggetti differenti e che ne rappresentano il valore; data la disposizione degli elementi appare chiaro come non sia possibile accedere a questi ultimi ricorrendo alla sintassi presentata in precedenza. Fortunatamente JSON non prevede l’introduzione di nuove espressioni per la risoluzione del problema, quindi potremo utilizzare anche in questo caso la dot notation:
h = mySim.figli.secondofiglio;
e la bracket notation:
h = mySim.figli["secondofiglio"];
E’ interessante notare come questa sintassi possa essere utilizzata anche per ridefinire i valori degli oggetti annidati. Si immagini per esempio di voler modificare il valore associato al secondo oggetto/valore dell’oggetto "figli"; utilizzando la dot notation avremo:
mySim.figli.secondofiglio= "Milhouse";
con la bracket notation avremo invece:
mySim.figli["secondofiglio"] = "Milhouse";