Home / Programmazione / Java / JSON decode con Java
Mattepuffo

JSON decode con Java

JSON decode con Java

Ad oggi si nota sempre di più il proliferare di web service che usano JSON per rappresentare i dati, o accanto o in sostituzione del più classico XML.

Java non ha una libreria in grado di decodificare JSON.

Ma ci sono tantissime librerie esterne in grado di farlo.

Su consiglio del forum ioProgrammo mi sono diretto su questa: Gson.

E' molto semplice da usare ed è in grado sia di codificare che di decoficare il formato JSON.

Qui lo useremeo per la seconda operazione.

Vediamo come connetterci al servizio imdbapi per recuperare informazioni sui film.

Prima di tutto scaricate la libreria e aggiungetela al vostro progetto.

Poi dovete vedere come il servizio vi restituisce i dati in modo da creare una classe che li rappresenta.

Ad esempio imdbapi restituisce una cosa del genere (vi mostro solo una parte):

{

 "Title":"The Immature",

 "Year":"2011",

 "Rated":"T",

 "Released":"21 Jan 2011",

 "Genre":"Comedy",

.........

}

Quindi la mia classe completa è questa:

public class Film {

    public String Title;
    public String Released;
    public String Genre;
    public String Director;
    public String Writer;
    public String Actors;
    public String Plot;
    public String Poster;
    public String Runtime;
    public String ID;
}

Qui ci sono tutti i dati che io personalmente voglio estrapolare dalla stringa JSON.

A questo punto creiamo una classe che interroga il servizio; il metodo restituisce un ArrayList in modo da memorizzare i vari dati e passarli poi ad un'altra classe:

public class TakeFilm {

    public static ArrayList take(String strFilm, String strYear) throws MalformedURLException, IOException {
        String search = "http://www.imdbapi.com/?i=&t=" + strFilm;
        if (!strYear.isEmpty()) {
            search += "&y=" + strYear;
        }
        BufferedReader bf = new BufferedReader(new InputStreamReader(new URL(search).openStream()));
        Gson gson = new GsonBuilder().create();
        Film film = gson.fromJson(bf, Film.class);
        ArrayList list = new ArrayList<>();
        list.add(film.Title); // 0
        list.add(film.Released); // 1
        list.add(film.Genre); // 2
        list.add(film.Director); // 3
        list.add(film.Writer); // 4
        list.add(film.Actors); // 5
        list.add(film.Plot); // 6
        list.add(film.Poster); // 7
        list.add(film.Runtime); // 8
        list.add(film.ID); // 9
        bf.close();
        return list;
    }
}

Alla ricerca passo sempre un parametro fisso (il titolo del film) e opzionalmente l'anno per essere più preciso.

Si apre uno stream all'url indicato con i vari parametri (oltre al film e l'anno ce ne sono altri che trovate descritti sulla pagina del servizio).

Creiamo un oggetto GsonBuilder per ricevere la stringa da decodificare.

Al passo dopo la decodifichiamo e i valori li salviamo nell'ArrayList.

Il passaggio è molto semplice.

A questo punto con questi dati ci facciamo quello che vogliamo.

Io li passo a un JFrame, riempio diverse caselle di testo e una JLabel con il poster e poi salvo tutto su un db SQLite.

Enjoy!