.: HosiriS :.

Informatica e non solo

Capire JSON

Posted by hosiris su aprile 1, 2011

Credo che non sia necessario spiegare cosa sia JSON, ma voglio raccogliere le tecniche di accesso a questo tipo di dato da diversi tipi di linguaggio.
Essendo derivato da javascript il metodo più semplice di accedere agli oggetti JSON è attraverso uno script js come mostrato di seguito:

var myvarJSON = { "persone":[
    {"nome":"giovanni",
     "cognome":"ruta",
     "sito":"https://hosiris.wordpress.com"},
    {"nome":"carlo",
     "cognome":"denaro",
     "sito":"http://www.grayhats.org"}
     ]
  }

Per accedere ai dati si utilizza la seguente notazione:

document.writeln(myvarJSON.persone[0].nome) // restituisce giovanni

E’ facile capire che un metodo così compatto di presentare i dati torna utilissimo in AJAX. Un esempio utilizzando jQuery potrebbe essere:

$.ajax({
  url: 'json.php',
  type: 'GET',
  dataType: 'json',
  success: function(oggetto) {
        var sito = $(oggetto).home;
        var url = $(oggetto).link;
        var aree = $(oggetto).aree;
        //...
    }
});

Adesso vediamo come generare ed interpretare questo tipo di dato utilizzando un linguaggio lato server (a cui arrivano le richieste asincrone): PHP, Python.

JSON in PHP
PHP dalle versione 5.2 viene distribuito con il supporto nativo a JSON. I metodi messi a disposizione sono 2:

  • json_encode( mixed value )
  • json_decode( string json [, bool assoc] )

Vediamo un esempio di trasferimento di dati, creiamo il file fruits.php:

<?php
$dsn = "mysql:host=localhost;dbname=[DATABASE NAME HERE]";
$username = "[USERNAME HERE]";
$password = "[PASSWORD HERE]";
$pdo = new PDO($dsn, $username, $password);
$rows = array();
if(isset($_GET['fruitName'])) {
    $stmt = $pdo->prepare("SELECT variety FROM fruit WHERE name = ? ORDER BY variety");
    $stmt->execute(array($_GET['fruitName']));
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode($rows);
?>

Scriviamo il codice javascript che gestirà questi dati:

function populateFruitVariety() {
    $.getJSON('/fruit-varities.php', {fruitName:$('#fruitName').val()}, function(data) {
        var select = $('#fruitVariety');
        var options = select.attr('options');
        $('option', select).remove();
        $.each(data, function(index, array) {
            options[options.length] = new Option(array['variety']);
        });
    });
}
$(document).ready(function() {
    populateFruitVariety();
    $('#fruitName').change(function() {
            populateFruitVariety();
    });
});

Python e JSON
Anche Python offre supporto al JSON, tramite una miriade di package (qui potete trovare un confronto). Io preferisco simplejson che elabora il JSON tramite le seguenti funzioni:

  • simplejson.dumps( python_object )
  • simplejson.loads( json_object )

Un possibile esempio di utilizzo è il seguente:

import simplejson, urllib
APP_ID = 'YahooAPIKey'
SEARCH_BASE = 'http://search.yahooapis.com/WebSearchService/V1/webSearch'
    
class YahooSearchError(Exception):
    pass
    
def search(query, results=20, start=1, **kwargs):
    kwargs.update({
        'appid': APP_ID,
        'query': query,
        'results': results,
        'start': start,
        'output': 'json'
    })
    url = SEARCH_BASE + '?' + urllib.urlencode(kwargs)
    result = simplejson.load(urllib.urlopen(url))
    if 'Error' in result:
        raise YahooSearchError, result['Error']
    return result['ResultSet']

Si può intuire la funzionalità del metodo: tramite Yahoo effettua delle ricerche che vengono restituite nel formato json.

Una Risposta to “Capire JSON”

  1. […] Continua a Leggere […]

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: