JSON (JavaScript Object Notation) è un formato leggero utilizzato per lo scambio di dati. Si basa su un sottoinsieme del linguaggio JavaScript (il modo in cui gli oggetti sono creati in JavaScript). Come affermato in MDN , alcuni JavaScript non sono JSON e alcuni JSON non sono JavaScript.
Un esempio di dove viene utilizzato sono le risposte dei servizi Web. Ai vecchi tempi, i servizi Web utilizzavano XML come formato di dati primario per la trasmissione di dati di ritorno, ma da quando è apparso JSON ( il formato JSON è specificato in RFC 4627 da Douglas Crockford ), è stato il formato preferito perché è molto più leggero
Puoi trovare molte più informazioni sul sito ufficiale JSON .
JSON è costruito su due strutture:
- Una raccolta di coppie nome / valore. In varie lingue, questo viene realizzato come oggetto, record, struct, dizionario, tabella hash, elenco con chiave o array associativo.
- Un elenco ordinato di valori. Nella maggior parte delle lingue, questo viene realizzato come una matrice, un vettore, un elenco o una sequenza.
Struttura JSON
Ecco un esempio di dati JSON:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
JSON in JavaScript
JSON (in Javascript) è una stringa!
Le persone spesso assumono che tutti gli oggetti Javascript siano JSON e che JSON sia un oggetto Javascript. Questo non è corretto
In Javascript nonvar x = {x:y}
è JSON , questo è un oggetto Javascript . I due non sono la stessa cosa. L'equivalente JSON (rappresentato nel linguaggio Javascript) sarebbe var x = '{"x":"y"}'
. x
è un oggetto di tipo stringa non un oggetto a sé stante. Per trasformare questo in un oggetto JavaScript a tutti gli effetti è necessario prima analizzarlo, var x = JSON.parse('{"x":"y"}');
,x
ora è un oggetto ma questo non è più JSON.
Vedi oggetto Javascript Vs JSON
Quando si lavora con JSON e JavaScript, si può essere tentati di utilizzare la eval
funzione per valutare il risultato restituito nel callback, ma ciò non è suggerito poiché ci sono due caratteri (U + 2028 e U + 2029) validi in JSON ma non in JavaScript (leggi di più qui ).
Pertanto, si deve sempre provare a utilizzare lo script di Crockford che verifica la presenza di un JSON valido prima di valutarlo. Il link alla spiegazione dello script si trova qui ed ecco un link diretto al file js. Oggi tutti i principali browser hanno una propria implementazione per questo.
Esempio su come utilizzare il parser JSON (con il json dallo snippet di codice sopra):
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
Il parser JSON offre anche un altro metodo molto utile, stringify
. Questo metodo accetta un oggetto JavaScript come parametro e restituisce una stringa con formato JSON. Ciò è utile per quando si desidera inviare nuovamente i dati al server:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
I due metodi precedenti ( parse
e stringify
) accettano anche un secondo parametro, che è una funzione che verrà chiamata per ogni chiave e valore a ogni livello del risultato finale e ogni valore verrà sostituito dal risultato della funzione immessa. (Maggiori informazioni qui )
A proposito, per tutti voi là fuori che pensano che JSON sia solo per JavaScript, dai un'occhiata a questo post che spiega e conferma il contrario.
Riferimenti