Java JSON Decode – Tutorial

Posted: Dezember 4th, 2013 | Filed under: Java, Programmieren | Tags: , , , , | 7 Comments »

imageDa sich JSON aus meiner Sicht immer mehr gegenüber dem Klassiker XML durchsetzt und ich mittlerweile auch die Verwendung einer JSON-Datei gegenüber einer gängigen “Property-Datei” (*.ini) bevorzuge, hier ein kleines Tutorial mit Hilfe ihr von Googles JSON-Bibliothek gson Json-Dateien einlesen bzw. erzeugen könnt.

GSON Bibliothek herunterladen und einbinden

Zu allererst müsst ihr die Java-Bibliothek gson herunterladen: https://code.google.com/p/google-gson/downloads/list und entpacken. Für die Verwendung benötigt ihr lediglich die Datei gson-X.X.X.jar.

image

Falls ihr eclipse als IDE eurer Wahl verwendet, könnt ihr hier nachlesen wie ihr diese genau einbindet (unter dem Abschnitt  “Bibliothek ins Projekt importieren”).

JSON-Datei lesen

Als Beispiel verwende ich folgende, relativ simple JSON-Datei, welche dennoch alle wichtigen Strukturen wie Array oder Objekt beinhaltet.

personen.json

{
   "personen" : [
      {
         "name" : "Frank",
         "alter" : 27,
         "hobbys" : [
            {
               "name" : "Karlsruher SC"
            },
            {
               "name" : "Computer spielen"
            }
         ]
      },
      {
         "name" : "Peter",
         "alter" : 21,
         "hobbys" : [
            {
               "name" : "Tennis"
            },
            {
               "name" : "Boxen"
            }
         ]
      }
   ]
}

Prinzipiell kann man JSON-Dateien mit Hilfe zwei verschiedener Vorgehensweise auslesen. Entweder direkt über ein vorhandenes Java-Objekt, oder allgemein über das sogenannte JsonObject. In diesem Beispiel verwende ich den Weg über das JsonObject.

GsonExample.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

public class GsonExample {

    public static void main(String[] args) {
        Gson gson = new Gson();
       
        try {
            // Datei "personen.json" über einen Stream einlesen
            FileInputStream input = new FileInputStream("personen.json");
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
           
            // Datei als JSON-Objekt einlesen
            JsonObject json = gson.fromJson(reader, JsonObject.class);
           
            // Attribut "personen" als Array lesen
            JsonArray personen = json.getAsJsonArray("personen");

            for(int i = 0; i < personen.size(); i++){
                JsonObject person = personen.get(i).getAsJsonObject();
               
                // Attribute ausgeben z.B.: name, alter und hobbies
                System.out.println(person.get("name").getAsString());
                System.out.println(person.get("alter").getAsInt());
               
                // Attribut "hobbys" als Array lesen
                JsonArray hobbys = person.get("hobbys").getAsJsonArray();
           
                for(int k = 0; k < hobbys.size(); k++){
                    JsonObject hobby = hobbys.get(k).getAsJsonObject();
                   
                    // Name des Hobbys ausgeben
                    System.out.println(hobby.get("name").getAsString());
                }
                System.out.println("------");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Konsolenausgabe

Frank
27
Karlsruher SC
Computer spielen
——
Peter
21
Tennis
Boxen
——

Ich hoffe ich konnte dem ein oder anderen damit helfen. Wie ihr ein vorhandenes Java-Objekt inklusive der vollständigen Daten-Struktur in eine JSON-Datei umwandelt und wieder einliest zeige ich euch das nächste mal.


7 Comments on “Java JSON Decode – Tutorial”

  1. 1 Sam said at 15:47 on Dezember 10th, 2013:

    Hey,

    ich habe mein Json Array als String vorliegen, wie mache ich das dann?

  2. 2 admin said at 21:52 on Dezember 10th, 2013:

    Hallo Sam,

    einfach einen String übergeben anstatt den Buffered Reader. Die Methode fromJson frisst ziemlich viel, siehe API:

    http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html

  3. 3 JSON-Datei als .INI/Property-Alternative :: Ein Karlsruher Bloggt! said at 11:02 on Januar 18th, 2014:

    […] Implementierung benötigt. Wie ihr die Bibliothek in euer Projekt einbinden könnt erfahrt ihr hier […]

  4. 4 Lars said at 17:11 on März 1st, 2014:

    GENAU das habe ich gesucht! danke für das tutorial 🙂

  5. 5 Michael said at 13:19 on Juni 3rd, 2014:

    Genau dieses umtändliche Handling braucht man mit gson nicht mehr. Mit gson ist es nämlich möglich direkt ein List zurückzuzugeben. Das würde den produktiven Code doch sehr stark vereinfachen.

  6. 6 Fin said at 12:30 on Juli 24th, 2014:

    Ich möchte keine Datei auslesen, sondern von einer Website, was muss ich dann machen?

  7. 7 Bea said at 11:47 on August 8th, 2015:

    Hallo,

    ich habe genau deinen Code und die JSON übernommen aber ich erhalte als Fehlermeldung:

    Exception in thread „main“ com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2
    at com.google.gson.Gson.fromJson(Gson.java:818)
    at com.google.gson.Gson.fromJson(Gson.java:741)
    at kalman.kalman.main(kalman.java:25)
    Caused by: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2
    at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505)
    at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:502)
    at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:403)
    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:666)
    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
    at com.google.gson.Gson.fromJson(Gson.java:803)
    … 2 more

    Woran kann das liegen?

    VG Bea


Leave a Reply