JSON e PHP: Un esempio concreto

Usare JSON per inviare e ricevere i dati di una classe


Nel precedente articolo abbiamo dato una breve introduzione a JSON che parla anche degli strumenti necessari per utilizzarlo, qui invece presenteremo un piccolo esempio concreto che precede l’articolo "JSON e PHP: creare un motore di ricerca con Yahoo!".

Convenzioni
Per comodità useremo la classe JSON di PEAR che basta scaricare ed includere nel vostro script: http://pear.php.net/pepr/pepr-proposal-show.php?id=198

Inviare i dati di una classe
A volte nelle nostre applicazioni abbiamo istanziato delle classi che ci sarebbe utile inviare così come sono ad applicazioni esterne.
Senza JSON bisognerebbe creare un foglio XML e perdere del tempo scrivendo il codice PHP che lo genera (il foglio XML) e che lo legge, invece con JSON siamo in grado di inviare la nostra classe con una sola riga di codice!
$json->encode($nostra_istanza_di_classe);
e leggere:
$json->decode($dato_ricevuto);

Un esempio
Immaginiamo di dover inviare da un sito di ecommerce le informazioni sugli ultimi prodotti venduti oggi.

Il server:
Prima di tutto includiamo la classe JSON che ci fornisce PEAR:
// Includiamo JSON/PEAR
include "JSON.php";
$json = new Services_JSON();

E definiamo la classe Articolo
class Articolo {
public $nome;
public $costo;
private $sigla;

public function setNome($nome) {
$this->nome = $nome;
}
public function setCosto($euro) {
$this->costo = $euro;
}
public function setSigla($sigla) {
$this->sigla = $sigla;
}
}

Ora creo degli articoli:
// Creo degli articoli
// Un cappello
$art['cappello'] = new Articolo;
$art['cappello']->setNome("Cappello Bellissimo");
$art['cappello']->setCosto(10);
$art['cappello']->setSigla('AB908LL');

// e una maglietta
$art['maglietta'] = new Articolo;
$art['maglietta']->setNome("Maglietta PHP");
$art['maglietta']->setCosto(18);
$art['maglietta']->setSigla('MA104JS');

Infine codifico e invio il risultato:
// codifico e mostro gli articoli
$json_string = $json->encode($art);
echo $json_string;

In questo caso l’output sarà:
{"cappello":{"nome":"Cappello Bellissimo","costo":10},"maglietta":{"nome":"Maglietta PHP","costo":18}}
notare che gli atributi private $sigla non vengono (giustamente) mostrati.

Il client:
Il client, ovvero chi richiede i dati al server, una volata ricevuti dovrà solamente effettuare il decode.
// Includiamo JSON/PEAR
include "JSON.php";
$json = new Services_JSON();

// decodifico ed utilizzo
$dati_ricevuti = '{"cappello":{"nome":"Cappello Bellissimo","costo":10},"maglietta":{"nome":"Maglietta PHP","costo":18}}';
$risultato = $json->decode($dati_ricevuti);

Per utilizzare il risultato potrò usare semplicemente qualcosa come
echo $risultato->cappello->nome;

per esempio
echo "Il nome del cappello e' ";
echo $risultato->cappello->nome;
echo " e costa ";
echo $risultato->cappello->costo;
echo " euro <br /> ";

echo "Il nome della maglietta e' ";
echo $risultato->maglietta->nome;
echo " e costa ";
echo $risultato->maglietta->costo;
echo " euro <br /> ";

mostrerà
"Il nome del cappello e' Cappello Bellissimo e costa 10 euro
Il nome della maglietta e' Maglietta PHP e costa 18 euro"

Conclusioni:
Data una classe PHP (o anche un array), è molto più veloce fare "$json->encode()" piuttosto che generare un foglio XML, inoltre si ha anche meno overhead a livello di peso in bit in caso di file grandi e di alto traffico.
Ad ogni modo l’esempio più vicino all’utilizzo comune di JSON per il web potrebbe essere proprio quello del prossimo articolo, ovvero un vostro script richiede un servizio da un sito più grande (come Yahoo!) che vi risponderà tramite JSON.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *