Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 95 di 97
  • livello avanzato
Indice lezioni

Leggere dati in formato JSON

Utilizzare le funzionalità messe a disposizione dall'SDK di Android per accedere, leggere e modificare il contenuto di file in formato JSON.
Utilizzare le funzionalità messe a disposizione dall'SDK di Android per accedere, leggere e modificare il contenuto di file in formato JSON.
Link copiato negli appunti

Il formato JSON (acronimo che sta per JavaScript Object Notation) è sempre più diffuso nelle applicazioni web e mobile, e trova spesso applicazione nel contesto dello sviluppo di app per Android. JSON è spesso usato per lo scambio di dati, nonché per la gestione di file di configurazione di varia natura. Data la grande diffusione di questo formato di dati, Android mette a disposizione una serie di strumenti built-in, parte integrante dell'SDK, che ci permettono di leggere e gestire dati di questo tipo. In questa lezione analizzeremo proprio questi aspetti, facendo ricorso a qualche esempio pratico

Scaricare un file JSON

Iniziamo con un esempio pratico: supponiamo di dover scaricare un file JSON, per poi leggerne il contenuto. A tale scopo possiamo fare ricorso ad un codice simile al seguente:

String url = "http://www.example.com/test.json";
String result;
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// Il test contenente i dati JSON verrà memorizzato nella stringa result
result = response.toString();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Qui possiamo gestire eventuali errori
}
});
// Utilizziamo il metodo addToRequestQueue per aggiungere la richiesta JSON alla RequestQueue
MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);

Come si vede, abbiamo utilizzato la classe JsonObjectRequest per costruire una richiesta HTTP GET verso l'URL specificato nella stringa url. Se la richiesta va a buon fine, viene eseguita la callback associata all'evento onResponse, che in questo caso si limita a valorizzare la stringa result con il contenuto del file JSON così ottenuto.

D'ora in avanti, quindi, supporremo che i nostri contenuti formattati in JSON siano memorizzati nella stringa result. Sempre a scopo esemplificativo, supponiamo di considerare il seguente file JSON:

{
"mappe": [
{
"id": "01",
"nome": "test"
},
{
"id": "02",
"nome": "prova"
}
],
"dispositivo": {
"power": "on",
"parametri": {
"p1": "0.0235849594",
"p2": "0.4877774151",
"p3": "2.0000022549"
}
}
}

Vediamo ora come accedere a questi dati JSON.

Accedere ai dati JSON

Una volta salvati i dati in una stringa, possiamo definire un nuovo oggetto JSON come segue:

JSONObject jObject = new JSONObject(result);

L'oggetto jObject conterrà tutte le informazioni di cui abbiamo bisogno. Per accedere, ad esempio, al sotto-oggetto JSON dispositivo, possiamo utilizzare il metodo getJSONObject():

JSONObject jDisp = jObject.getJSONObject("dispositivo");

Analogamente, se avessimo valori identificabili come stringhe, interi, booleani, eccetera, potremmo sfruttare i relativi metodi, elencati di seguito:

Metodo Tipo di ritorno
getBoolean() boolean
getInt() int
getLong() long
getString() string
get() Object

Merita un approfondimento specifico il metodo getJSONArray(), che permette di accedere ad un array JSON. Ad esempio, possiamo accedere all'array mappe dell'esempio precedente:

JSONArray jArray = jObject.getJSONArray("mappe");
for (int i=0; i < jArray.length(); i++)
{
try {
JSONObject oneObject = jArray.getJSONObject(i);
} catch (JSONException e) {
// Errore
}
}

Anche in questo caso è possibile usare i diversi metodi mostrati nella tabella precedente, in base al valore di ritorno di cui abbiamo bisogno. Tuttavia, mentre prima utilizzavamo, come parametro, la chiave (che è una stringa) rappresentante l'oggetto che volevamo ottenere, nel caso dell'oggetto JSONArray dobbiamo utilizzare l'indice della posizione dell'elemento da recuperare.

Altri metodi molto utili forniti dalla classe JSONObject sono has(), che permette di verificare se una stringa è presente tra le chiavi dei sotto-oggetti, ed i metodi keys() e names(), entrambi utili per ottenere le chiavi dell'oggetto JSON (con la differenza che il primo restituisce un Iterator, mentre il secondo un JSONArray). Maggiori informazioni su questi ed altri metodi sono reperibili sulla documentazione ufficiale.

Modifica di oggetti JSON

La classe JSONObject ci permette anche di aggiungere elementi ad un oggetto JSON, tramite il metodo put(), che accetta due parametri: una stringa (rappresentante la chiave), e l'oggetto vero e proprio (sia esso una stringa, un numero, un JSONObject o un JSONArray). Vediamo un semplice esempio di seguito, in cui costruiamo un oggetto JSON e lo aggiungiamo a jObject (istanza di JSONObject precedentemente definita):

// Creiamo un nuovo oggetto JSON definito come segue:
// { "chiave1": "test", "chiave2": "2.5" }
JSONObject njo = new JSONObject();
njo.put("chiave1", "test");
njo.put("chiave2", 2.5);
// Aggiungiamo anche un array
JSONArray nja = new JSONArray();
nja.put(1);
nja.put(2);
nja.put(3);
njo.put("array", nja);
// Il nosto oggetto njo è quindi così fatto:
// { "chiave1": "test", "chiave2": "2.5", "array": ["1", "2", "3"] }
// Inseriamo quindi l'oggetto appena creato in jObject, con chiave "nuovo"
jObject.put("nuovo", njo);

Ulteriori informazioni possono essere reperite nella documentazione ufficiale, facendo principalmente riferimento alle seguenti pagine:

Ti consigliamo anche