Cos'è JSON e perché dovrei usarlo?

Ho guardato su wikipedia e su Google e ho letto la documentazione ufficiale, ma non sono ancora arrivato al punto in cui ho veramente capito cos'è JSON e perché lo dovrei usare.

Ho costruito applicazioni usando PHP, MySQL e Javascript / HTML per un po', e se JSON può fare qualcosa per rendere la mia vita più facile o il mio codice migliore o la mia interfaccia utente migliore, allora mi piacerebbe saperlo. Qualcuno può darmi una spiegazione succinta?

Soluzione

JSON (JavaScript Object Notation) è un formato leggero usato per lo scambio di dati. È basato su un sottoinsieme del linguaggio JavaScript (il modo in cui gli oggetti sono costruiti in JavaScript). Come dichiarato nel MDN, alcuni JavaScript non sono JSON, e alcuni JSON non sono JavaScript. Un esempio di dove questo viene usato sono le risposte dei servizi web. Nei 'vecchi' giorni, i servizi web usavano XML come formato dati principale per trasmettere i dati di ritorno, ma da quando è apparso JSON (Il formato JSON è specificato in RFC 4627 di Douglas Crockford), è stato il formato preferito perché è molto più leggero Puoi trovare molte altre informazioni sul sito web JSON ufficiale. JSON è costruito su due strutture:

  • Una collezione di coppie nome/valore. In vari linguaggi, questo è realizzato come un oggetto, record, struct, dizionario, tabella hash, lista con chiave o array associativo.
  • Un elenco ordinato di valori. Nella maggior parte dei linguaggi, questo è realizzato come un array, un vettore, una lista o una sequenza.

    Struttura JSON

    JSON è una lista di valori ordinati;









    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! La gente spesso assume che tutti gli oggetti Javascript siano JSON e che JSON sia un oggetto Javascript. Questo non è corretto. In Javascript var x = {x:y} è non 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** e non un oggetto a sé stante. Per trasformarlo in un oggetto Javascript a tutti gli effetti devi prima analizzarlo, var x = JSON.parse('{"x":"y"}');, x è ora un oggetto ma non è più JSON. Vedi Javascript object Vs JSON

Quando si lavora con JSON e JavaScript, si può essere tentati di usare la funzione eval per valutare il risultato restituito nel callback, ma questo non è suggerito poiché ci sono due caratteri (U+2028 & U+2029) validi in JSON ma non in JavaScript (leggi di più su questo qui). Pertanto, si deve sempre cercare di 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 e qui c'è un link diretto al file js. Tutti i principali browser al giorno d'oggi hanno una propria implementazione per questo. Esempio su come usare il parser JSON (con il json dello 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 in formato JSON. Questo è utile per quando si vuole inviare 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) prendono anche un secondo parametro, che è una funzione che sarà chiamata per ogni chiave e valore ad ogni livello del risultato finale, e ogni valore sarà sostituito dal risultato della funzione inserita. (Maggiori informazioni su questo qui) Btw, per tutti voi là fuori che pensate che JSON sia solo per JavaScript, guardate questo post che spiega e conferma il contrario.

Riferimenti

Commentari (9)

JSON è JavaScript Object Notation. È un modo molto più compatto di trasmettere insiemi di dati attraverso connessioni di rete rispetto a XML. Suggerisco di usare JSON in qualsiasi applicazione di tipo AJAX dove XML sarebbe altrimenti l'opzione raccomandata. La verbosità di XML aumenterà il tempo di download e il consumo di banda ($$$). Si può ottenere lo stesso effetto con JSON e il suo mark-up è quasi esclusivamente dedicato ai dati stessi e non alla struttura sottostante.

Commentari (0)

la risposta breve comune è: se state usando AJAX per fare richieste di dati, potete facilmente inviare e restituire oggetti come stringhe JSON. Le estensioni disponibili per Javascript supportano le chiamate toJSON() su tutti i tipi di javascript per inviare dati al server in una richiesta AJAX. Le risposte AJAX possono restituire oggetti come stringhe JSON che possono essere convertite in oggetti Javascript con una semplice chiamata eval, ad esempio se la funzione AJAX someAjaxFunctionCallReturningJson restituisce

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

potreste scrivere in Javascript

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON può anche essere usato per i payloads dei servizi web e così via, ma è davvero conveniente per i risultati AJAX.

  • Aggiornamento (dieci anni dopo): Non farlo, usa JSON.parse
Commentari (2)