JSON mit Java

Über JSON

JSON (JavaScript Object Notation) ist ein schlankes Datenaustauschformat.  Es ist unabhängig von der Programmiersprache und es gibt in den meisten Sprachen schon Standard Bibliotheken. Auf www.json.org bzw. www.json.org/json-de.html gibt es eine genaue Erklärung über das Format.

JSON Bibliotheken

Es gibt eine Reihe von Java JSON Bibliotheken, siehe www.json.org. In diesem Artikel wurde der Jackson JSON Processor angewendet. Es gibt ein gutes wiki (http://wiki.fasterxml.com/JacksonHome) mit Tutorials und die Einführung ist sehr einfach.

Jackson

Jackson Core kann unter  http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/ heruntergeladen werden. Nachdem die jar's herunter geladen wurden müssen diese noch zum Projekt hinzugefügt werden. In diesem Artikel wird Eclipse verwendet, dies geschieht unter Properties/Java Build Path /Libraries /Add External JARs…

Jackson in Verbindung mit http

Nun möchten wir kurz erklären wie man einen http Datenstream als Klasse bekommt. Zuallererst muss von der http Quelle gelesen werden. Dies geschieht einfach mit mit einem BufferedReader:


try{
URL used_url;
Used_url = new URL(„http://www.ihreseite.at/api/bla.php?abc=123“);
URLConnection con = used_url.openConnection();
BufferedReader in = new BufferReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while((inputLine = in.readLine()) != null) retstr += inputString;
}catch(Exception e)
{…}

Der gelesene String möchte nun Verarbeitet werden dazu verwenden wir nun Jackson:

Ein einfaches JSON Inputstring Beispiel wäre z.B. :


{
    "id" : "1"
    "Titel" : "Hit’s 2012"
    "Verlag" : "JSON Verlag"
},

Dies wollen wir auf die Klasse CD mappen, dazu erstellen wir die Klasse CompactDisk


public class CompcatDisk{

@JsonIgnoreProperties(ignoreUnknown = true)

private int ID;

private String Titel;


public void setID(int ID)
{
this.ID=ID;
}

public void setTitel(String Titel)
{
this.Titel = Titel;
}

public int getID()
{
return this.ID;
}

public String getTitel()
{
return this.Titel
}
}

 

Die Zeile JsonIgnoreProperties ist wichtig, wir haben nämlichVerlag in unsere CompcatDisk klasse nicht implementiert und so würde der Mapper eine Exception werfen. Mit der Annotation weisen wir den Mapper an nicht definierte members zu ignorieren, in unserem Fall also Verlag.

Die ganze Beschreibung zu Annotation finden Sie hier: 

">http://wiki.fasterxml.com/JacksonAnnotations

 

Sollten Sie in der Praxis vom Webserver mehr Daten zurückbekommen bietet sich eine Parser Klasse an die Ihnen die nötigen JSON Informationen separiert. Hat man nun die Rohdaten ist ein Konvertieren von JSON in unser gewünschtes Klassenobjekt sehr einfach:



ObjectMapper m = new ObjectMapper();
CompcatDisk cd = (CompactDisk[]) m.readValue(string, CompactDisk.class);

 

Das war es auch schon!

Sollen Sie z.B. per JSON eine ganze Sammlung von CD’s zurück bekommen muss nicht viel mehr geändert werden, wichtig ist das die Objektnotation (‚[‚ am Anfang + ‚]‘ am Ende):


[
{
    "id" : "1"
    "Titel" : "Hit’s 2012"
    "Verlag" : "JSON Verlag"
},
{
    "id" : "2"
    "Titel" : "Hit’s 2011"
    "Verlag" : "Jackson ist TOLL Verlag"
},
]

Ändern Sie einfach die letzte Zeile und Sie bekommen ein Array von Objekten zurück:


CompcatDisk[] cd = (CompcatDisk[]) m.readValue(string. CompactDisk[].class);

 

Categories: 
Go to top