E' arrivata l'estate HOT! Sconti fino al 70% su tutti i corsi!
Davide Copelli WebSU

JSON e PHP per leggere e trasmettere dati in remoto

Articolo a cura di: Davide Copelli {ing}

Facebook

Agli arbori di internet, i file testuali erano il principale strumento per lo scambio di informazioni. Ben presto vennero soppiantati da XML, ossia da file testuali con all'interno tag simili all'HTML, inseriti per descrivere i dati contenuti all'interno e che, una volta standardizzati, potevano essere sfruttati per essere interpretati correttamente da diverse tipologia di programmi.

L'avvento di tecnologie lato client, basate su JavaScript, ha reso popolare un altro formato, usato in passato per descrivere gli oggetti appunti in JavaScript. So parlando di JSON, che è l'acronimo di "JavaScript Object Notation". Oramai i moderni linguaggi di programmazione tra cui PHP, hanno all'interno una serie di funzionalità per gestire facilmente questa tipologie di dati.

Perchè devi saper usare JSON?

Se avessi un file testuale con l'elenco dei libri presenti nel mio ipotetico sito web online, questo potrebbe avere un tracciato di questo tipo:

numero|titolo|codice ISBN

Questa riga può essere rappresentata con il classico array associativo:

array("numero" => "22", "titolo" => "L'isola del tesoro", "codiceisbn" => "987772733")

e l'insieme di tutti i record del file, come un array di tanti array riga. Sorge allora il problema di come poter inviare queste informazioni ad un utente che ne faccia richiesta da remoto, chiamando ad esempio una mia API creata appositamente per questo.

Inviare l'intero file come documento da scaricare? Non è  certo la soluzione ideale.

Nel caso di file XML, ogni riga potrebbe essere rappresentata:

<numero>22</numero>
<titolo>L'isola del tesoro</titolo>
<codiceisbn>987772733</codiceisbn>

Nel caso invece di file JSON, ogni riga potrebbe essere rapprentata con una struttura più compatta:

[{"numero": "22", "titolo": "L'isola del tesoro", "codiceisbn": "987772733"}, {} ...

quindi facilmente codificabile e inviabile come dato query, tramite una classica richiesta via HTTP.

Morale della favola: JSON è un sistema per rappresentare array di dati o oggetti, sotto forma di testo, senza però l'"appesantimento" dei file XML, e questo lo ha reso così versatile, in particolar modo per lo sviluppo di API basate su JavaScript.

Di questo ne parliamo ad esempio nel "Corso JavaScript con jQuery" in cui ti farò vedere come sfruttare jQuery e AJAX per recuperare dati dal web prelevati da un account Twitter in formato JSON, e decodificarli per la visualizzazione all'interno di una pagina web, oppure nel corso "Creare APP con PhoneGap/Cordova" in cui vedremo come creare dati in formato JSON, per scambiare informazioni (leggere e scaricare) tra l'app e un web server remoto per classice operazioni CRUD.

Sfruttando il linguaggio PHP, si possono ugualmente effettuare con semplicità operazioni di codifica dati, e di decodifica.

Trasformare un array PHP in un oggetto JSON 

La prima operazione che potresti avere la necessità di fare, è inviare dei dati letti da un database, al client che ne ha fatto richiesta, il tutto sotto forma di dati inviati in formato JSON tramite la rete. Ipotizzando di gestire un negozio online di libri, a di aver recuperato da un database MySQL i dati relativi a titolo e codice ISBN, inserendoli all'interno di un array:

$libri_acquistati[] = array(
array("numero" => "22", "titolo" => "L'isola del tesoro", "codiceisbn" => "98987772733"),
array("numero" => "134", "titolo" => "Le avventure di Tom Sower", "codiceisbn" => "9877273344")
);

A questo punto, per codificare l'array nel formato JSON, e poterlo così trasmettere senza problemi tramite HTTP, basterà chiamare la funzione predefinita in PHP json_encode():

$elencolibri_json = json_encode($libri_acquistati);

Il risultato sarà una strings del tipo:

[{"numero":"22","titolo":"L'isola del tesoro","codiceisbn":"98987772733"},{"numero":"134","titolo":"Le avventure di Tom Sower","codiceisbn":"9877273344"}]

Trasformare un oggetto JSON in array PHP

La presenza delle parentesi quadre, indica che si tratta di un array, mentre le parentesi graffe, indicano che si tratta di un oggetto o array associativo. In fase di lettura, ipotizzarndo di riceverlo sotto forma di parametro query, dovremo quindi specificare quale formato usare.

$elencolibri = json_decode($elencolibri_json, true);

Il secondo parametro "true", indica che l'oggetto restituito sarà convertito in un array associativo:

Pertanto scrivendo:

print_r($elencolibri);

Ritroveremo l'array iniziale da cui sono partito, e che potrò facilmente scorrere. Se invece preferisco scorrere l'oggetto, con le relative proprietà numero, titolo, codiceisbn, allora non dovò specificare alcun secondo parametro.

Array
(
    [0] => Array
        (
            [numero] => 221
            [titolo] => L'isola del tesoro
            [codiceisbn] => 98987772733
        )

    [1] => Array
        (
            [numero] => 134
            [titolo] => Le avventure di Tom Sower
            [codiceisbn] => 9877273344
        )

)
WebStartUniversity
WebStartUniversity

Ricevi le anteprime dei nuovi corsi! Iscriviti Gratuitamente

Cliccando su Iscriviti, accetti le nostre condizioni d'uso e la politica sulla privacy

×