2009-07-21 11 views
15

Potrebbe dirmi, a cosa serve JSON (in Javascript e PHP). quando abbiamo bisogno di un metodo JSON.Dove/quando usiamo JSON?

Ho letto dal seguente collegamento ma, non ho ricevuto alcuna informazione riguardante l'implementazione JSON su alcun progetto.

http://www.json.org/js.html

+3

dovrebbe essere comunità wiki – SilentGhost

+1

... se wasn' t un duplicato un paio di volte – annakata

risposta

21

JSON è un formato di scambio dati leggero (pensare ad esso come XML su una dieta). Fondamentalmente qualsiasi posto in cui è possibile utilizzare XML per serializzare i dati è possibile utilizzare invece JSON.

3

JSON è solo un formato di dati. Se è necessario archiviare o trasportare dati non più complicati di una serie nidificata di coppie nome-valore, i cui valori sono supportati dallo standard JSON, JSON potrebbe essere il formato dati corretto per il proprio progetto.

Se il progetto ha avuto la memorizzazione dei dati/esigenze di trasporto;)

8

Nonostante il nome, uno degli usi primari del formato JSON è in AJAX sviluppo web (anche se certamente non l'unico). È spesso preferito rispetto al tradizionale XML per la sua sintassi leggera.

2

JSON è un formato di scambio di dati relativamente leggero (almeno se confrontato con XML o HTML) ed è molto utile quando si scambiano piccole quantità di dati tra un client Web e un server Web/servizio.

Tuttavia, non è la scelta migliore (anche se molto meglio di XML) per lo scambio di elenchi di dati di grandi dimensioni, a causa del sovraccarico per riga scambiati.

4

JSON è il formato dei dati utilizzato nella trasmissione dei dati. Viene utilizzato principalmente nelle chiamate JavaScript AJAX.

La struttura di JSON è semplicemente denominata tra parentesi: coppie di valori. A causa della sua natura compatta e della sua semplicità, è una struttura migliore per la trasmissione di set di dati relativamente piccoli e cose che possono essere raggruppate in nome: coppie di valori.

Ad esempio:

Un prototype.js Ajax chiamata di trasformazione e la ricezione di dati JSON:

my_prototype_class = Class.create(); 
my_prototype_class.prototype = { 
    initialize: function() { 
     this.myarray = new Array(); 
     //do initialization 
    },  
    my_function: function(direction){ 
     new Ajax.Request('/my/url.php', 
      {  
       method: 'post', 
       parameters: { name: value, 
           myarray_data: this.myarray.toJSON() }, 
       onSuccess: function(transport) { 
        var response = transport.responseText.evalJSON(); 
        //handle response 
       }, 
       onFailure: function(){ 
        //handle failure 
       }  
      }); 
    } 
} 
Event.observe(window, "load", function(){new my_prototype_class();}, false); 

E utilizzando PHP si sarebbe gestire la richiesta con qualcosa di simile:

function my_php_handler() 
{ 
    #parse POST data 
    $name = $_POST["name"]; 
    $myarray_data = $_POST["myarray_data"]; 

    #transform the data in some way 

    #return encoded string 
    echo json_encode($results); 
} 

Qualcosa del tipo:

[{"myarray": [], "name": value}] 

verranno passati in giro nella richiesta/risposta http. I dati in questo formato si chiamano JSON.

1

JSON è principalmente utilizzato come alternativa leggera e più leggibile dall'uomo per XML nelle applicazioni Web AJAX.

2

Suggerirei di utilizzare JSON se si ha la necessità di manipolare i dati recuperati (cioè attraverso una chiamata Ajax nel proprio browser) con codice JavaScript. In tal caso, JSON è molto comodo poiché puoi caricarlo direttamente nel tuo JavaScript e utilizzarlo (quindi Java Script Object Notation => JSON). Questo è chiamato deserializzazione di una stringa JSON in oggetti JavaScript. Può essere fatto usando eval(), che tuttavia - ho letto - pone alcuni problemi di sicurezza, per cui dovrebbe essere usato un serializzatore JSON (de).

Come descritto sul page hai menzionato di avere qualche stringa JSON come

{"bindings": [ 
     {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, 
     {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, 
     {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} 
    ] 
} 

che viene inviato attraverso la rete, avviato da alcuni dei Ajax chiamata sul client, dove poi un callback viene richiamato come (cioè in .net)

function onSuccess(result){ 
    var myObj = Sys.Serialization.JavaScriptSerializer.deserialize(result, false); 
    myObj.bindings[0].ircEvent... 
} 

il vantaggio è solo il semplice (de) serializzazione insieme quando si utilizza JavaScript, per lo più su sviluppo web con l'Ajax. Altrimenti non userei davvero JSON, ma piuttosto mi affido all'XML, dato che per le app desktop ci sono davvero potenti librerie di analisi.

2

Tutte le altre risposte sono fantastiche, ma forse la spiegazione più semplice per il caso specifico (JavaScript + PHP): JSON è il modo più semplice per tradurre un oggetto JavaScript in un array o oggetto associativo PHP (e viceversa)).

Dai uno sguardo a json_encode() e json_decode() per il lato PHP delle cose. Sul lato JavaScript, un semplice eval() è il modo più semplice (ma meno sicuro!) Per ottenere un oggetto da una stringa JSON, ma la libreria di scelta avrà sicuramente delle funzioni per occuparsi di questo per te, e se stai mirando ai nuovi browser puoi utilizzare lo ECMAScript 5 JSON object.

3

JSON è un ottimo formato per il trasferimento di dati tra Javascript e PHP. Il mio uso più comune è per i messaggi di stato.

Ecco alcuni Javascript per eseguire una query Ajax su un piccolo script PHP.

new Ajax.Request('dostuff.php', { 
     method: 'get', 
     parameters: {'param1': 'this is param 1'}, 
     onSuccess: function(response, jsonHeader){ 
      if(jsonHeader['status'] == 'Success'){ 
      //Everything is OK, do stuff 
      }else{ 
      alert(jsonHeader['status']); 
      } 
     }, 
     onFailure: function(){ 
      alert('Fail!'); 
     } 
    }); 

Poi, sul lato PHP, si può avere qualcosa di simile:

$jsonHeader = array(); 

    if($_REQUEST['param1']) 
    { 
     echo '<p>You passed ' . $_REQUEST['param1'] . '</p>'; 
     $jsonHeader['status'] = 'Success'; 
    }else 
    { 
     $jsonHeader['status'] = 'Failed because the request was invalid'; 
    } 

    if(is_array($jsonHeader) and sizeof($jsonHeader) > 0) 
    { 
     header('X-JSON: (' . json_encode($jsonHeader) . ')'); 
    } 

La cosa accurata è che Prototype decodifica automaticamente l'intestazione X-JSON che PHP sta creando.

Il risultato finale è che l'argomento jsonHeader del metodo onSuccess in Javascript viene convertito automaticamente in un array che è gli stessi dati come l'array $ jsonHeader in PHP