JSON è un formato standard per lo scambio di dati tra piattaforme informatiche che nasce e si basa sul linguaggio Javascript (JSON, infatti, è l’acronimo di JavaScript Object Notation).
E’ bene precisare che, nonostante nasca da Javascript, JSON è un formato testuale completamente indipendente dal linguaggio, in quanto può essere utilizzato ed interpretato correttamente anche da altri linguaggi com, ad esempio, PHP, Java, C, Python e molti altri.
Il successo di JSON è dovuto a diversi fattori:
- è un formato testuale semplice e leggero;
- è totalmente indipendente dal linguaggio.
La sintassi di JSON
La sintassi di JSON ricorda moltissimo quella degli oggetti Javascript dove i dati sono rappresentati sotto forma di coppie nome-valore separate mediante il simbolo dei due punti (:) che funge da operatore di assegnazione.
nome: valore
Per renderci conto di questa somiglianza vediamo la sintassi di un semplice oggetto Javascript:
var auto = { marca: "Audi", modello: "A4", colore: "Nero" }
Tradotto in JSON avremmo avuto una tringa di questo tipo:
{ "marca": "Audi", "modello": "A4", "colore": "Nero" }
Come possiamo notare le due sintassi sono quasi identiche con la sola differenza che in JSON anche i nomi (oltre ai valori) necessitano delle virgolette. Per il resto, le somiglianze con javascript sono piuttosto evidenti:
- la stringa JSON è delimitata da parentesi graffe esattamente come l’oggetto definito in Javascript;
- le diverse coppie nome-valore sono separate da delle virgole;
- nome e valore sono collegati tra loro dal simbolo due punti (:).
Array di valori con JSON
Mediante JSON è possibile rappresentare della Array. Per farlo si utilizzano le parentesi quadre in questo modo:
{
"automobili": [
{ "marca": "Audi", "modello": "A4", "colore": "Nero" },
{ "marca": "FIAT", "modello": "Punto", "colore": "Bianco" },
{ "marca": "Nissan", "modello": "Micra", "colore": "Blu" }
]
}
Ancora una volta, esattamente come in Javascript, l’array può contenere diversi oggetti, ciascuno dei quali delimitato da paretesi graffe. Nel nostro esempio l’array "automobili" contiene tre oggetti che corrispondono a tre diverse automobili.
Interpretare JSON con Javascript
Normalmente l’utilizzo di JSON in un applicativo lato client, prevede che i dati così formattati siano il frutto di una elaborazione lato server. In pratica, l’utilizzo di JSON è frequente nelle applicazioni di tipo AJAX dove si verifica, appunto, un interscambio di dati tra uno codice Javascript ed una sorgente di dati remota.
Per comodità espositiva supponiamo, tuttavia, di aver incorporato il nostro JSON direttamente all’interno del sorgente del nostro script, includendolo come se fosse una banale stringa.
var dati = '{' +
+ '"automobili": ['
+ '{ "marca": "Audi", "modello": "A4", "colore": "Nero" },'
+ '{ "marca": "FIAT", "modello": "Punto", "colore": "Bianco" },'
+ '{ "marca": "Nissan", "modello": "Micra", "colore": "Blu" }'
+ ']'
+ '}';
Una volta incluso nello script, il nostro JSON potrà essere convertito in un oggetto Javascript mediante la funzione JSON.parse() in questo modo:
var obj = JSON.parse(dati);
La funzione JSON.parse() accetta come argomento un stringa in notazione JSON grazie alla quale generare un oggetto JavaScript.
Una volta trasformato la stringa JSON in un oggetto potremo accedere ai dati con una sintassi del genere:
alert(obj.automobili[1].marca + ' - ' + obj.automobili[1].modello);
L’output generato farà riferimento all’indice "1" perché l’indicizzazione dei record avviene come nel caso degli array, seguendo un ordinamento automatico che va da "0 a N", avremo quindi il primo record con indice "0", il secondo (quello estratto dal nostro script) associato all’indice "1" e così via.
Conclusioni
Il formato JSON risulta un validissimo sistema di scambio dati quando si ha la necessità di sviluppare applicativi che coinvolgono diversi linguaggi e tecnologie. Il suo essere indipendente dal linguaggio, infatti, lo rende un ottimo alleato nello sviluppo di sistemi ibridi in cui sia necesario uno scambio dati tra gli script lato client ed una qualche sorgente server-side.