json

Mattepuffo's logo
Parsing JSON con Python

Parsing JSON con Python

In un precedente articolo abbiamo visto come effettuare una richiesta HTTP con Python.

In quel caso abbiamo fatto una semplice richiesta, senza preoccuparci del tipo di dato che viene resituito dal server.

In molti casi, in verità, i dati sono strutturati; tipo in JSON o XML.

Noi vedremo come fare nel primo caso.

Il JSON che ci viene restituito ha due tag: nome e data.

Quindi dopo aver ricevuto la risposta vediamo anche come estrapolare i singoli valori.

Mattepuffo's logo
Parsing JSON in C++ con Rapidjson

Parsing JSON in C++ con Rapidjson

Per fare il parsing di una struttra JSON in C++ ci stanno molte librerie; io mi sono buttato su Rapidjson.

La documentazione sul sito ufficiale non è proprio il massimo, ma nel complesso è abbastanza semplice da implementare e includere nel nostro progetto.

Scaricate la libreria e aggiungete la cartella rapidjson al progetto; dentro ci stanno diversi file .h.

Quello che faremo è usare CURL per prendere i dati da remoto, fare il cast di CURLcode in string, e infine parsare i dati JSON.

Cominciamo come al solito dal file di intestazione:

#ifndef READ_H
#define    READ_H

#include <iostream>
#include <curl/curl.h>
#include <iomanip>
#include "rapidjson/document.h"
#include "rapidjson/rapidjson.h"

using namespace std;
using namespace rapidjson;

extern "C" int readCurlHelper(char *data, size_t size, size_t nmemb, string *buffer);

class Read {
public:
    Read();
    virtual ~Read();
    void read(string file);
    size_t curlToString(char *data, size_t size, size_t nmemb, string *buffer);
private:
    string response;
    string url;
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers;
    Document document;
};

#endif

Rispetto all'ultimo articolo, abbiamo aggiunto le librerie rapidjson e un oggetto Document.

Mattepuffo's logo
Richieste HTTP e JSON con C++ e CURL

Richieste HTTP e JSON con C++ e CURL

Oggi vedremo come usare la libreria CURL con il C++.

Il codice che vedremo è abbastanza multi piattaforma; ovviamente è necessario installare CURL e linkare il percorso giusto alla libreria, cose che differiscono da OS a OS.

Su Linux e Mac dovreste avere già CURL preinstallato; su Windows vi consiglio di procedere installando Cygwin.

Non mi soffermo su questo passaggio, ma do per scontato che l'abbiate fatto.

Detto ciò creiamo una nostra classe per usare questa libreria.

Cominciamo con il file .h:

#ifndef READ_H
#define    READ_H

#include <iostream>
#include <curl/curl.h>

using namespace std;

class Read {
public:
    Read();
    virtual ~Read();
    void read(string file);
private:
    string url;
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers;
};

#endif

Nella classe abbiamo definito una funzione per leggere i dati da un file preso in remoto; la funzione richiede un unico parametro, che è appunto il file da chiamare.

Mattepuffo's logo
Android Spinner da JSON

Android Spinner da JSON

Oggi vediamo un altro componente importante, lo Spinner, e come riempirlo prendendo i dati dal server in formato JSON.

Lo Spinner è un menu a tendina che ci permette di scegliere tra una serie di valori.

Cominciamo con la richiesta al server per ottenere i dati:

public class Service {

    private final String remote = "http://www.sito.com/service/";
    
    public String getCausali() throws ClientProtocolException, IOException, JSONException {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(remote + "get_causali.php");
        HttpResponse response = client.execute(post);
        HttpEntity entity = response.getEntity();
        BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        reader.close();
        return sb.toString();
    }
    
}

Tramite HttpClient ci connettiamo al server e con HttpPost inviamo una richiesta POST al file specifico (che in questo caso è in PHP).

Il file sul server esegue la query e restituisce i dati in JSON (guardate qua per un esempio).

Prendiamo il contenuto e lo aggiungiamo a un oggetto StringBuffer.

A questo punto creiamo una classe wrapper che rappresenta la nostra tabella sul db; nel mio caso ho solo due campi:

  • id
  • nome

Ecco il mio esempio:

public class Causali {
    
    private int id;
    private String nome;

    public Causali(int id, String nome) {
        this.id = id;
        this.nome = nome;
    }
    
    public int getId() {
        return this.id;
    }
    
    public String getNome() {
        return this.nome;
    }
    
    @Override
    public String toString() {
        return this.nome;
    }
    
}

Questa classe ci servirà come contenitore.

Mattepuffo's logo
Usare i form con Sencha Touch

Usare i form con Sencha Touch

Proseguiamo con Sencha Touch e i suoi componenti.

Oggi vediamo come usare i form.

Non terremo in considerazione validazione cose del genere, ma solo un uso basilare.

Per prima cosa preprate un file PHP (o di altro linguaggio lato server) da contattare al submit del form.

Ricordo che Sencha Touch è Javascript driven e quindi per svolgere determinate operazione (invio email, iscrizione, ecc....) richiede l'uso di file lato server.

Per fare un esempio un pò più completo ho pensato di usare subito un file lato server:

// test.php

<?php

$response = array('result' => $_POST['nome']);

echo json_encode($response);

La risposta che il file invierà sarà in formato JSON e sarà il nome inserito nella textfield.

Mattepuffo's logo
PHP JSON decode

PHP JSON decode

Qui avevo parlato di come trasformare il risultato di una query in formato JSON.

Da qualche parte si presume ci sia un client che voglia vedere il risultato della query, e non in formato JSON.

I tipi di client possono essere i più vari, e scritti in diversi linguaggi.

Se vogliamo fare la decodifica in PHP possiamo farlo in maniera molto semplice.

Ripartiamo dalla parte server:

<?php $host = "localhost"; $user = "user"; $pass = "pwd"; $db = "library"; $conn = mysqli_connect($host, $user, $pass, $db) or die(mysqli_connect_error()); if (mysqli_connect_errno()) { echo "Connessione fallita: " . die(mysqli_connect_error()); } $result = mysqli_query($conn, "SELECT * FROM book"); $rows = array(); while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $rows[] = array( 'title' => $row['title'], 'author' => $row['author'], 'editor' => $row['editor'] ); } echo json_encode($rows); mysqli_free_result($result); mysqli_close($conn);