Apps für Android programmieren leicht gemacht!
JSON lesen

JSON lesen

JavaScript Object Notation oder einfach kurz JSON ist ein kompaktes Datenformat, welches es uns ermöglicht ganz einfach und unkompliziert Daten zwischen Anwendungen auszutauschen.

Man könnte über JSON ganz einfach Daten von einem Webserver oder halt einer Webseite auslesen, in der eigenen Android App einlesen und anschließend verwenden.
Der Vorteil an dieser Datenübertragungsmethode ist, dass so gut wie jede Programmiersprache JSON parsen kann und man sich kein Sorgen über die Formatierung machen muss. Umlaute werden zum Beispiel automatisch umgewandelt. Ideal also, um Statusupdates oder News von unserer Webseite in unsere Android App zu bekommen.

Doch wie stellt man diese Umwandlung nun an, um aus einer JSON-Datei dann verwendbare Daten zu erstellen ?
Dieser Fragestellung wollen wir uns in diesem Artikel widmen.

 

JSON verstehen:

Bevor wir anfangen können zu programmieren und die JSON-Datei auszulesen, müssen wir erst einmal verstehen wie JSON-Dateien aufgebaut sind.
Am besten können wir diesen Punkt anhand eines Beispiels klären. Dieses Beispiel werden wir dann in unserer späteren Programmierung auch weiterverwenden.

[{
"ID" : 45,
"Name" : "Quark",
"Preis" : 0.34,
"Lagernd" : true,
"Bio" : false
},{
"ID" : 47,
"Name" : "Milch",
"Preis" : 1.04,
"Lagernd" : false,
"Bio" : false
},{
"ID" : 54,
"Name" : "Weizenbrot",
"Preis" : 3.65,
"Lagernd" : true,
"Bio" : true
}]

Wenn wir uns unser Beispiel nun genau anschauen können wir Einiges erkennen.

  • Da mehrere Blöcke hintereinander kommen beginnt und endet unser Beispiel mit „[]“.
  • Jeder Block beginnt und endet mit „{}“.
  • Jeder Block ist jeweils mit einem „,“ getrennt.
  • Die Informationen eines Blocks sind wie folgt aufgebaut:
    „NAME“ : WERT
  • Auch jede Information innerhalb eines Blocks ist mit einem „,“ getrennt.
  • Besteht der WERT einer Information aus einem Text wird er eingeklammert.

 

JSON analysieren:

Nun wissen wir, wie eine JSON-Datei aufgebaut ist und wir können sie auch bereits per Hand auslesen.
Im nächsten Schritt sollten wir versuchen die Daten dann auch per Programmcode auszulesen.
Was wir vorher allerdings tun sollten, ist uns zu überlegen was uns die JSON-Datei für Informationen liefert und welche wir wirklich verwenden wollen.

In unserem Beispiel suchen wir einfach alle Informationen heraus, die unter „NAME“ : WERT stehen.
Da hätten wir die ID, den Namen, den Preis, ob der Artikel vorrätig ist und ob es sich um ein Produkt mit dem Bio-Siegel handelt.
Wir einigen uns in diesem Beispiel einfach mal darauf, dass wir weder Kenntnis über das Bio-Siegel noch über den Preis haben wollen, weil wir nur wissen möchten welche Produkte vorrätig sind und welche nicht.

 

Java – Klasse schreiben:

Nun können wir dann auch endlich anfangen zu programmieren.
Wir benötigen eine Klasse, welche die auszulesenden Daten beinhalten kann, so können wir innerhalb von Java am besten mit den Daten jonglieren.

Ich nenne sie mal „Produkt“ und sie soll die ID, den Namen und die Information, ob das Produkt vorrätig ist, enthalten.

public class Produkt{

  int ID;
  boolean lagernd;
  String name;

  // SETTER
  public void setID(int ID){this.ID = ID;}
  public void setLagernd(boolean lagernd){this.lagernd = lagernd;}
  public void setName(String name){this.name = name;}

  // GETTER
  public int getID(){return ID;}
  public boolean getLagernd(){return lagernd;}
  public String getName(){return name;}

}

 

JSON auslesen und Klassen befüllen:

Die Vorarbeit ist geleistet.
Fangen wir nun endlich an JSON in Java zu lesen.

Wir benötigen vorerst ein paar Imports.

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

Da wir in diesem Artikel davon ausgehen die JSON-Datei bereits heruntergeladen zu haben füge ich die Datei einfach mal per String Variable in den Code ein.

Unsere Vorgehensweise sieht wie folgt aus: Wir gehen jeden Block der JSON-Datei durch. Für jeden gefundenen Block erstellen wir uns ein neues Objekt vom Typ Produkt und füttern es mit den erhaltenen Informationen. Zum Schluss fügen wir das eben erstellte Objekt vom Typ Produkt in eine Liste hinzu, damit wir später damit arbeiten können.
Nun sollten wir eine LinkedList erstellen, in die wir dann ganz einfach die Objekte hinzufügen können:

LinkedList<Produkt> produktListe = new LinkedList<Produkt>();

Anschließend lesen wir alle Blöcke der untersten Ebene ein und erstellen so ein Array an Produkten:

JSONArray produktArray = new JSONArray(jsonString);

Wir können durch alle enthaltenen Blöcke des Arrays springen:

for (int i = 0; i < produktArray.length(); ++i) {
   // Hier können wir die Informationen jedes einzelnen Blocks auslesen
}

Um innerhalb der for-Schleife nun den Inhalt des eigentlichen Blocks zu erhalten müssen wir „getJSONObject“ anwenden.

JSONObject jsonProdukt = produktArray.getJSONObject(i);

Letztendlich gehen wir nun durch alle Blöcke unseres Beispiels durch und haben auch alle Informationen im Speicher, aber ausgelesen haben wir bisher noch kein bisschen.
In der Variable „jsonProdukt“ sind alle nötigen Infos enthalten, wir können sie auslesen, indem wir beispielsweise „getString()“ darauf anwenden. Innerhalb der Klammer gehört der Name des auszulesenden Wertes. Zum Beispiel wollen wir die ID erhalten, also wollen wir einen Integer bekommen -> ergo „getInt()“. Dieser Integer ist unter dem Namen „ID“ gespeichert, also erhalten wir den Wert, indem wir schreiben:

jsonProdukt.getInt("ID");

Hier die gesamte Auslesefunktion:

Produkt neuesProdukt = new Produkt();

neuesProdukt.setID(jsonProdukt.getInt("ID"));
neuesProdukt.setLagernd(jsonProdukt.getBoolean("Lagernd"));
neuesProdukt.setName(jsonProdukt.getString("Name"));

produktListe.add(neuesProdukt);

 

Ich habe mir die Freiheiten genommen den Code mit Fehlerabfragen zu bestücken und zusammenzufügen.
So sieht der fertige und funktionierende Code aus:

//LinkedList erstellen, um Daten in Java zu speichern
        LinkedList<Produkt> produktListe = new LinkedList<Produkt>();
        try {
            
            //JSON einlesen und unterste Ebene durchgehen
            JSONArray produktArray = new JSONArray(jsonString);

            if (produktArray != null) {
                
                //Durch alle Blöcke gehen
                for (int i = 0; i < produktArray.length(); ++i) {
                    
                    //Den Block an der Stelle i des Arrays auslesen
                    JSONObject jsonProdukt = produktArray.getJSONObject(i);

                    //Neues Objekt vom Typ Produkt erstellen
                    Produkt neuesProdukt = new Produkt();
                    
                    //Objekt mit Daten aus JSON füttern
                    neuesProdukt.setID(jsonProdukt.getInt("ID"));
                    neuesProdukt.setLagernd(jsonProdukt.getBoolean("Lagernd"));
                    neuesProdukt.setName(jsonProdukt.getString("Name"));

                    //Objekt der LinkedList hinzufügen
                    produktListe.add(neuesProdukt);
                }
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld