La possibilità di memorizzare dati o comunque di rappresentarli in maniera da poterli trasferire tra programmi anche diversi è fondamentale nella programmazione. In questo ambito si può far rientrare la serializzazione, cioè il processo di trasformazione di un oggetto in un formato facilmente memorizzabile e/o trasmissibile, ed il relativo processo inverso, cioè la deserializzazione.
Rappresentazione JSON
La maggior parte dei moderni linguaggi di programmazione supporta dei meccanismi che consentono di gestire questi processi e rappresentare gli oggetti in formati diversi spesso basati su XML. Negli ultimi tempi, però, si sta sempre più affermando la rappresentazione di oggetti in JSON (JavaScript Object Notation). Come indica il nome, questo formato nasce dalla notazione letterale degli oggetti di JavaScript, ma è diventato ormai uno standard de facto indipendente dal linguaggio di programmazione e dalla piattaforma.
Sostanzialmente JSON utilizza un sottoinsieme della notazione letterale degli oggetti di JavaScript per rappresentarli sotto forma di stringa. Ad esempio, il seguente oggetto:
{nome: "Mario", cognome: "Rossi"}
viene rappresentato in JSON con la seguente stringa:
'{nome: "Mario", cognome: "Rossi"}'
Da notare che abbiamo utilizzato il singolo apice come delimitatore di stringa per non interferire con i doppi apici delle stringhe interne. Anche un array può essere rappresentato nella notazione JSON. Ad esempio il seguente array
[1, "test", true]
viene rappresentato come
'[1, "test", true]'
Naturalmente è possibile rappresentare array di oggetti ed oggetti che prevedono array o altri oggetti come proprietà. La notazione JSON però non prevede la rappresentazione dei metodi di un oggetto.
Naturalmente l'utilizzo di questo formato per la serializzazione e deserializzazione di oggetti in JavaScript è del tutto immediato, dal momento che in linea di principio sarebbe sufficiente utilizzare l'eval()
della stringa per ottenere l'oggetto rappresentato. In pratica però è opportuno effettuare alcuni controlli per evitare errori e l'introduzione di codice indesiderato.
A questo scopo, a partire dalla versione 5 di ECMAScript è stato introdotto un parser nativo per la serializzazione e deserializzazione in notazione JSON. Il parser è implementato dall'oggetto JSON che prevede due metodi specifici: parse() e stringify().
Il metodo parse() prende in input una stringa JSON e genera il corrispondente oggetto JavaScript:
var marioRossi = JSON.parse('{nome: "Mario", cognome: "Rossi"}');
Il metodo stringify() genera la rappresentazione JSON dell'oggetto passato come argomento:
var jsonMarioRossi = JSON.stringify({nome: "Mario", cognome: "Rossi"});
Se l'oggetto da rappresentare contiene dei metodi, questi vengono semplicemente ignorati dal parser.