JSON – introduzione e approfondimento 17





JSON (JavaScript Object Notation) è un formato adatto per lo scambio dei dati in applicazioni client-server.
La semplicità di JSON ne ha decretato un rapido utilizzo specialmente nella programmazione in AJAX. Il suo uso tramite JavaScript, è particolarmente semplice, infatti l’interprete è in grado di eseguirne il parsing tramite una semplice chiamata alla funzione eval().
I tipi di dati supportati da questo formato sono: (booleani; interi, reali, virgola mobile;stringhe;array; oggetti (coppie chiave-valore); null)


Esempio di oggetto JSON:

Utilizzo in javascript:

Riga 1: Creazione dell’oggetto JSON
Riga 2: Parsing dell’oggetto JSON per renderlo accessibile in javascript
Riga 3: Utilizzo dei dati contenuti nell’oggetto JSON

Usare JSON con AJAX

Riga 1: creazione dell’oggetto ajax tramite XMLHttpRequest
Riga 2: Richiesta del file dati (json) tramite ajax , può essere uno script php o un file testo qualsiasi
Riga 3: Funzione da eseguire quando i dati sono pronti
Riga 4: Se l’operazione è stata completata con successo (readyState=4)
Riga 5: memorizziamo i dati nella variabile dati
Riga 8:
altrimenti viene visualizzato un messaggio di errore
Riga 10: Esecuzione della richiesta AJAX.

La maggior parte dei linguaggi di programmazione possiede un typesystem molto simile a quello definito da JSON per cui sono nati molto progetti che permettono l’utilizzo di JSON con altri linguaggi quali, per esempio: ActionScript, C, C#, Delphi, Java, JavaScript, Lua, Perl, PHP, Python, Ruby.

Approfondimenti : Json.org

Usare JSON con PHP

Ecco alcuni esempi che utilizzano la liberia JSON.php.

Creazione di un ‘oggetto’ JSON :

Riga 1: caricamento della libreria JSON.php
Riga 2: crezione dell’istanza
Riga 3: creazione di un array php da convertire in JSON
Riga 4: chiamata del metodo encode per creare ” l’oggetto ” JSON
Lettura di un ‘oggetto’ JSON

Riga 1: caricamento della libreria JSON.php
Riga 2: crezione dell’istanza
Riga 3: stringa php contente l’oggetto JSON.
Riga 4: chiamata del metodo decode per caricare ” l’oggetto ” JSON in PHP

Seguimi su twitter : @ironico

17 thoughts on “JSON – introduzione e approfondimento

  1. Reply Cisternino ivano giu 8,2013 23:01

    salve avrei la necessita di creare un file Jons di questo tipo
    {chiveX:valoreY,chiaveX+1:valoreZ} e via discorrendo ovvio che x e y cambiano. questo perch io estrapolo da un db dei dai che mi vengono forniti in questo modo {descProdotto:valoreX},{descProdotto:valoreX} ecc quindi cambia solo il valore. spero di essermi spiegato bene il linguaggio che utilizzo PHP

  2. Reply Sito TuttiAegine ago 27,2011 14:00

    ma e possibile creare un codice json al momento della richiesta??

    nel senso: io chiedo a questa pagina: json.php?ids=12345

    lo lo script nella pagina json mi legge il valore di ‘ids’ tramite get
    e cerca il record nel database e poi quando l’ha trovato scrive sulla pagina

    {
    “id”: “valore”,
    “nome”: “valore”,
    }
    perchè io ho provato ma viene fuori cosi:
    {“id”: “valore”,”nome”: “valore”}

    • Reply Gennaro Varriale ago 29,2011 07:51

      certo che puoi farlo, evidentemente sbagli qualcosa.
      Se usi php, per esempio dovresrti fare in questo modo :
      {“id”:”$id”,”nome”:”$nome”}
      dove $id e $nome sono valorizzati con i valori presenti nel DB e all’interno di un ciclo di lettura

  3. Reply marco gen 29,2011 22:23

    Ciao Gennaro,
    sto cercando di realizzare un’applicazione iphone per il pagamento della sosta automobilistica.Lato server ho un web service che espone dei metodi e a seconda della funzionalità(inizio sosta,fine sosta ecc…) chiamo il servizio che mi restituisce dei dati che devo visualizzare sul mio dispositivo.I dati possono essere passati al web service come oggetto json/jsonp(per le richieste cross domain)?Il web service mi può restituire le informazioni sempre in un oggetto json?
    Grazie

    • Reply Gennaro Varriale gen 30,2011 12:26

      Non capisco il problema, se sei tu a realizzare sia l’aps iphone che il web service, non dovresti avere problemi. Se la domanda era un consiglio per il protocollo di scambi dati tra apps iphone e servizi, personalmente, trovo che il json sia perfetto. Semplice, leggero e versatile.

  4. Reply Alessandro nov 9,2010 11:59

    Ciao, sto cominciando a fare qualche applicazione per facebook, ma sono ancora agli inizi. Girando per la rete in cerca di aiuto, sono capitato nel tuo blog alchè mi sono detto: perchè non chiedere direttamente aiuto a chi ne capisce di più di me? :) Quindi ecco la domanda:
    Io utilizzavo questo metodo:

    $friends = $facebook->api_client->friends_get();

    per avere la lista degli amici. Ho dimenticato di dire che utilizzo PHP :)
    Leggendo nelle documentazioni facebook, ho visto che queste API verranno deprecate a favore delle più nuove GRAPH API. Ecco il mio problema. Ho letto che è semplicissimo accedere alle informazioni, tramite un semplice link del tipo:

    https://graph.facebook.com/me

    Ora ho letto da questo blog come poter gestire il risultato JSON. Ma come faccio a ricavarmelo? Nel senso, tu nel blog hai scritto:

    $input = "{ id:10, nome:'gennaro', racconti:['un eroe','indeciso'] , nascita:'23/5/1973' }";
    $value = $json->decode($input);

    Utilizzando appunto il valore JSON di INPUT e codificandolo in VALUE. Ma dato che io il valore “INPUT” devo ricavarmelo da una chiamata HTTPS (https://graph.facebook.com/me) che funzione devo utilizzare?

    Ho letto la risposta precedente, dove hai consigliato di scrivere:

    $friends = $facebook->api(%u201Cme/friends?fields=id,name,picture%u201D);

    ho provato, ma mi restituisce errore:
    Fatal error: Call to undefined method Facebook::api()

    come se il metodo “api” non esistesse….cosa sbaglio???

    Grazie mille

    • Reply Gennaro Varriale nov 9,2010 12:26

      analisi perfetta, hai commesso solo qualche piccolo errore ;)

      Devi utilizzare le nuove api, le trovi nel repository di GitHub (https://github.com/facebook/php-sdk)

      Nella nuova classe troverai il metodo api().

      Quindi potrai utilizzarle in questo modo :

      • Reply Alessandro nov 9,2010 13:35

        Ok, grazie per la rapidità. Ho scaricato l’SDK nuovo, l’ho collegato alla mia applicazione ed ecco che non mi funziona più nulla :)
        Siamo sicuri che queste nuove GRAPH siano migliori delle vecchie API????

        A parte questa mia considerazione del tutto personale, ho prova a capirci qualcosa, ed ho notato che cambia praticamente TUTTO! So di uscire fuori tema, ma non sapevo dove poter chiedere certe cose, sei l’unico che mi ha risposto in mesi di ricerche, quindi ne approfitto :D

        Cominciamo dall’autenticazione, prima mi bastava scrivere

        if ($_POST['fb_sig_in_canvas']){

        per controllare che si fosse già iscritti all’applicazione e nel caso usciva in automatico la finestrella per autorizzare l’applicazione per l’utente che aveva visitato l’applicazione stessa.
        Ora invece, c’è questo controllo:
        if ($facebook->getSession()) {

        fosse solo questo il problema :) lo cambio ed ecco che per far uscire il LINK per il LOGIN, devo scrivere questo:

        echo '<a href="' . $facebook->getLoginUrl() . '">Login</a>';

        tutto ok, mi esce il link LOGIN e mi aspetto che cliccando mi esca la famosa finistrella per dare le autorizzazioni alla mia applicazione…ma così non è!!! Mi esce solo la scritta:
        ERRORE
        errore di caricamento della pagina [nome mia applicazione]

        Cosa sbaglio? Tutto immagino :D Preciso che ho modificato nelle impostazioni della mia applicazione l’abilitazione all’OAuth 2.0 for Canvas (beta)

        Povero me….Grazie ancora….

        • Reply Gennaro Varriale nov 9,2010 19:08

          Ti rispondo qui, ma in genere mi piace avere le domande inerenti all’articolo (anche se siamo partiti dal json ;) )
          Comunque, il tuo approccio è giusto, solo che c’è un pò di confusione, ma è ovvio visto come son cambiate le cose.
          Presto scrivero un articolo per fare chiarezza.

          Nel tuo caso è probabile che non hai settato il tipo di applicazione a “iframe” (le apps di tipo fbml presto saranno deprecate).
          Quando si utilizza un iframe si è ovviamente in un iframe quindi devi mettere il target “_top” al link o meglio fai un redirect della pagina

          dove –loginUrl– è l’url che ti da la funzione $facebook->getLoginUrl().

          Spero nel weekend di trovare il tempo per scrivere l’articolo, altrimenti sarà il prossimo.

          ciao

  5. Reply paolo ott 14,2010 23:23

    ..e poi itero.. perfetto.. :D
    grazie mille per l’info e soprattutto per la velocità.
    Buon lavoro, Paolo

  6. Reply paolo ott 14,2010 22:27

    Ciao Gennaro, complimenti per tutte le info che dai..
    volevo chiederti un’informazione, se puoi.

    Sono alle prime armi con lo sviluppo di app per fb,
    volevo sviluppare una applicazione con le nuove API di Facebook, che a quanto ho capito utilizzano chiamate HTTP REST e ricevono risposte JSON.
    Per iniziare volevo elencare i miei amici..ma non riesco.
    Ho visto un po’ il codice di esempio: http://github.com/facebook/php-sdk/blob/master/examples/example.php

    ..ho creato l’app.. collegata e funziona con l’esempio linkato..
    ma non capisco come posso ottenere le info degli oggetti json( tipo https://graph.facebook.com/me/friends) dal mio index.php.

    In pratica volevo fare quello che nelle oldREST era un semplice friends.getLists.
    Potresti aiutarmi?

    Ti ringrazio in anticipo, Paolo

    • Reply Gennaro Varriale ott 14,2010 22:57

      Ciao,
      quello che devi fare e utilizzare la funzione api della classe facebook.
      Nel tuo caso, per ottenere la lista amici , puoi eseguire il seguente codice
      $friends = $facebook->api(“me/friends?fields=id,name,picture”);
      Che ti restiuisce un array di amici con le informazioni dei campi selezionati.

  7. Reply chicco set 14,2009 13:46

    grazie ottimo tutorial… ne avevo proprio bisogno!

    ciao

Leave a Reply to Sito TuttiAegine Cancel Reply

  

  

  

Login with:
Powered by Sociable!

Per essere informato sui miei contenuti - Email: