Come gestire JSON in PHP
Nel corso di questo articolo esamineremo brevemente come integrare all’interno delle nostre soluzioni PHP la codifica JSON che tanto successo sta riscontrando negli ultimi anni soprattutto grazie alla sua capacità di essere una codifica neutra ed estremamente leggera in termini di dimensione.
JSON è l’abbreviazione di Javascript Object Notation, come si diceva è un formato leggero utilizzato per lo scambio di informazioni. E’ basato su un sottoinsieme delle specifiche del linguaggio Javascript, in particolare riferita alla parte concernente la creazione degli oggetti.
Durante questa nostra trattazione mostreremo, attraverso un semplice esempio, come sia possibile manipolare oggetti JSON all’interno di codice php, è importante osservare che affinchè i codici presentati possano essere testati il sistema di prova dovrà essere dotato di una versione dell’interprete PHP successiva alla 5.3.
Cominciamo
JSON (Javascript Object Notation) è un sistema di notazione che risulta sia leggero in termini di dimensioni degli oggetti prodotti e interpretabile anche dall’uomo, si tratta di una notazione manipolabile anche a livello client per mezzo javascript il che lo rende una soluzione molto comoda per la comunicazione di dati tra client e server. Il formato JSON sta progressivamente sostituendo il formato XML nel trasferimento di dati tra client e server grazie al supporto nativo fornito da tecnologie come AJAX, le API di Google Map solo per citarne due delle più note.
Un Oggetto JSON consta di due elementi costitutivi fondamentali:
- Una collezione di coppie chiave/valore sulla falsariga di un dizionario
- Una lista ordinata di valori
La leggerezza del formato JSON lo rende preferibile all’XML in quanto riduce il consumo di banda e riduce la rigidità nella struttura dei messaggi, chiaramente questo non significa che il formato JSON sia scevro da limitazioni, ad esempio non è possibile trasferire infomrazioni in formato nativo come nel caso delle date, in queste circostanze si è costretti ad un processo di conversione che ad esempio nel caso delle date le converta in stringhe, interi o timestamp UNIX. I tipi di dati supportati nativamente dal formato JSON sono:
- Stringhe
- interi
- null
- booleani
- array
- oggetti
Di seguito riportiamo una semplice pagina HTML in riportiamo un possibile esempio di oggetto JSON
<!DOCTYPE html> <html lang="it"> <head> <title>Esempio di oggetto in formato JSON</title> </head> <body> <h1>Example of JSON Format</h1> { "nome": "Paolino", "cognome": "Paperino", "sposato": "no", "Num di nipoti": 3, "Sesso": "Uomo", "indirizzo": { "via": "Via dei glicini 13", "citta": "Paperopoli", "stato": "US", "codice postale": 20081 }, "numeri di telefono": [ "212 555-1234", "646 555-4567" ] } </body> </html>
Alcune delle caratteristiche del testo formattato secondo lo standard JSON sono:
- E’ una notazione neutra indipendente dal linguaggio di programmazione utilizzato per la sua manipolazione
- E’ leggero
- E’ auto esplicativo e facilmente comprensibile
- Confrontato con lo XML, il formato JSON risulta più veloce e semplice da implementare
Encoding di oggetti JSON in PHP
In PHP per effettuare l’encoding di stringhe secondo il formato JSON si utilizza la funzione json_encode, la quale può produrre solo due possibili valori
- Un oggetto JSON in caso di successo
- FALSE nl caso in cui la codifica fallisca
Si noti che tutte le informazioni passate alla funzione in esame devono essere codificate secondo il formato UTF-8.
L’interfaccia di invocazione della funzione json_encode prevede tre parametri che sono nell’ordine:
- I valori che si desidera codificare
- Una serie di indicazioni circa la codifica da adottare per specifici elementi presenti nel testo da
codificare come ad esempio tag, apici ecc, di seguito riportiamo un elenco delle opzioni principali:- JSON_HEX_QUOT
- JSON_HEX_TAG
- JSON_HEX_AMP
- JSON_HEX_APOS
- JSON_NUMERIC_CHECK
- JSON_PRETTY_PRINT
- JSON_UNESCAPED_SLASHES
- JSON_FORCE_OBJECT
- JSON_PRESERVE_ZERO_FRACTION
- JSON_UNESCAPED_UNICODE
- JSON_PARTIAL_OUTPUT_ON_ERROR
La cui descrizione è reperibile qui
- La profondità ossia il massimo grado di annidamento consentito nella definizione della struttura dei
dati, il suo valore deve essere obbligatoriamente superiore ad uno
Detto questo, di seguito si mostra un semplice esempio:
<!DOCTYPE html> <html lang="it"> <head> <title>Esempio di codifica JSON</title> </head> <body> <h1>Esempio di codifica JSON</h1> <?php $lang= array("PHP", "Java", "JS", "HTML", "Perl", ".NET"); // Restituisce ["PHP","Java","JS","HTML","Perl",".NET"] echo json_encode($lang); echo "<br>"; //[{"php":"PHP","Java":"JAVA","HTML":"HTML","perl":"PERL","net":" NET"}] $lang=array(array("php" => "PHP", "Java" => "JAVA", "HTML" => "HTML", "perl" => "PERL", "net" => "NET")); echo json_encode($lang); echo "<br>"; // Restituisce: {"PHP":true,"JAVA":true," Perl":false,"Basic":null} echo json_encode(array("PHP" => true, "JAVA" => true, " Perl" => FALSE, "Basic" => null)); ?> </body> </html>
In questo caso le stringhe e i tipi booleani ed alcuni dati particolari come in valori null, non sono convertiti in stringhe, ma conservano la loro tipizzazione originale durante il processo di codifica. Similmente nell’esempio seguente la funzione json_encode è utilizzata in combinazione con un oggetto complesso, in cui le proprietà dichiarate come public sono codificate in formato json, chiaramente le proprietà classificate come private sono escluse dal processo di codifica.
<!DOCTYPE html> <html lang="it"> <head> <title>Esempio di codifica JSON</title> </head> <body> <h1>Esempio di oggetto PHP codificato in JSON</h1> <?php class lang { public $java = "JAVA"; public $php = "PHP"; public $html = "HTML"; public $js = "JAVASCRIPT"; public $perl = "PERL"; public $data = ""; } $lan = new lang(); $lan->data = new DateTime(); /* Restituisce: {"java":"JAVA","php":"PHP","html":"HTML","js":"JAVASCRIPT","perl" :"PERL","data":{"date":"2016-11-18 01:27:34.000000","timezone_type":3,"timezone":"UTC"}} */ echo json_encode($lan); ?> </body> </html>
Nella prossima sezione esamineremo il processo di decodifica di dati espressi in formato JSON.
Decodifica di oggetti JSON in PHP
La decodifica di oggetti espressi secondo il formato JON avviene adottando la funzione json_decode. Questa funzione accetta in input solo due informazioni:
- Una stringa in cui sono memorizzati i dati secondo lo standard JSON
- Un parametro boolean che se impostato sul valore TRUE fa si che l’oggetto restituito dalla funzione
di decodifica sia convertito in un array di tipo associativo in cui cioè gli attributi sono convertiti in chiavi per l’array.
La funzione può restituire due possibili valori:
- Un oggetto in complesso in cui alle diverse informazioni è associato il giusto tipo PHP, quindi ad esempio i dati booleani sono convertiti nel valori TRUE e FALSE e non come interi
- Null nel caso in cui la decodifica fallisca ad esempio nel caso in cui i dati siano stati formattati in modo errato
Di seguito riportiamo un semplice esempio di decodifica di una stringa in formato JSON
<!DOCTYPE html> <html lang="it"> <head> <title>Esempio di decodifica JSON</title> </head> <body> <h1>Decodifica JSON</h1> <?php /*Le due invocazioni restituiranno lo stesso tipo di risultato object(stdClass)#1 (5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) } array(5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) } */ $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump (json_decode ( $json)); echo "<br>"; var_dump (json_decode ( $json, true)); ?> </body> </html>
Per mezzo della funzione var_dump è possibile esaminare nel dettaglio il tipo di struttura generata dalla funzione di decodifica ed in particolare i tipi associati alle differenti informazioni, si noti come gli array e oggetti siano descritti nella loro struttura.
Con questo si conclude questo nostro primo approccio all’uso del formato JSON all’interno di codice PHP, alla prossima Stay Tuned.
Commenti