• Keine Ergebnisse gefunden

Verarbeitung von JSON-Daten

N/A
N/A
Protected

Academic year: 2021

Aktie "Verarbeitung von JSON-Daten"

Copied!
14
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Datenaustausch mit JSON

(2)

Datenaustausch

JSON (JavaScript Object Notation)

I einfaches textbasiertes Datenaustauschformat

I menschenlesbar

I standardisiert in RFC 4627 Kodierung von Daten

I Binärformate (.png, .mp3, . . . )

effizient, aufwändig, nicht menschenlesbar

I Textformate (.txt, .java, . . . ):

menschenlesbar, Aufwand für Ein- und Ausgabe

I generische Formate (.xml, .json, . . . ):

Datenaustausch, implementiert in Bibliotheken

(3)

JSON

I “Objekte” mit Attribut:Wert-Zuordnungen

I Leerzeichen außerhalb von Strings nicht relevant

I Zeilenumbrüche nicht relevant {

"type" : "node", "id" : "363179",

"lat" : 48.1408871, "long" : 11.5615991

}, {

"type" : "way", "id" : " 372802991",

"nd": ["3763512880", "3763512881", "1545920068"],

"tags" : {

"bus" : "yes",

"name" : "Herkomerplatz",

"highway" : "platform"

} }

(4)

JSON Werte

I Strings (z.B. "abc", "say \"hello\"")

I Zahlen (z.B. -12, 12E9, 12.9)

I Wahrheitswerte (true, false)

I Arrays — Reihe von beliebigen Werten in eckigen Klammern Beispiele: [1,2,3,4] und [2.4, true, { "key": "val"}]

I Objekte

– beliebige Anzahl von Attribut-Wert-Paaren zwischen geschweiften Klammern

– Reihenfolge der Attribut-Wert-Paare nicht relevant – Attribute sind durch Strings benannt

Beispiel: {"type": "message", "words" : ["Hi", "World!"] } Eine genaue Grammatik findet man auf http://www.json.org.

(5)

Verarbeitung von JSON-Daten

Es gibt viele Bibliotheken für die Ein- und Ausgabe von JSON-Daten:

I org.json

(verfügbar von https://github.com/stleary/JSON-java)

I Jackson

I GSON

I . . .

Im Folgenden wird org.json kurz vorgestellt. Diese Bibliothek müssen Sie ggf. noch aus dem Internet herunterladen.

IDEs bieten dazu auch Komfort-Funktionen an, z.B.

Intellij: Project Structure → Libraries → + → fromMaven

(6)

org.json

Wichtige Klassen:

I JSONArray:

– Repräsentiereung von JSON-Arrays, z.B.

["Hello", "World!"]

– Methoden zum Zugriff auf die Arrayeinträge

I JSONObject:

– Repräsentierung von JSON-Objekten, z.B.

{"type": "message", "words" : ["Hello", "World!"] } – Methoden zum Zugriff auf die Werte von Attributen

I Für andere Werte (Strings, Zahlen, Wahrheitswerte) werden die Standardklassen von Java verwendet.

I JSONTokener:

Hilfsklasse zum Einlesen z.B. aus einer Datei.

(7)

Parsen mit org.json

String s =

JSONObject json = new JSONObject(s);

// Wert des Attributs "type" als String

String t = json.getString("type"); // "way"

JSONArray nd = json.getJSONArray("nd");

// Wert mit Arrayindex 1 als String String id1 = nd.getString(1);

// Wert mit Arrayindex 1 als Double double d1 = nd.getDouble(1);

Bei Fehlern (kein JSON-Format, angefrages Attribut nicht

vorhanden, falscher Typ) wird eine JSONException ausgelöst.

{ "type":"way", "nd": ["3763512880","3763512881","1545920068"],

"tags": { "name":"Herkomerplatz", "highway": "platform" } }

(8)

Parsen mit org.json

String s =

JSONObject json = new JSONObject(s);

// geschachteltes Objekt

JSONObject tags = json.getJSONObject("tags");

String n = tags.getString("name");

// Alle Attribute durchlaufen.

// Gibt "type", "nd" und "tags" aus.

for (String k: json.keySet()) { System.out.println(k);

}

{ "type":"way", "nd": ["3763512880","3763512881","1545920068"],

"tags": { "name":"Herkomerplatz", "highway": "platform" } }

(9)

Parsen mit org.json

String s =

JSONObject json = new JSONObject(s);

// Schlaegt fehl, da der Wert des Attributs "type"

// ein String ist, kein Objekt.

JSONObject o = json.getJSONObject("type");

// Abfragen, ob ein Attribut gesetzt ist if (!json.has("data")) {

... // Behandle Fall, dass Attribut "data" fehlt.

}

// Wert des Attributs "data" oder ein Defaultwert, wenn // das Attribut nicht existiert

String tag_or_default = json.optString("data", "default");

{ "type":"way", "nd": ["3763512880","3763512881","1545920068"],

"tags": { "name":"Herkomerplatz", "highway": "platform" } }

(10)

Parsen mit org.json

String s =

JSONArray arr = new JSONArray(s);

double d1 = nd.getDouble(1);

["3763512880","3763512881","1545920068"]

(11)

Einlesen von Dateien

Einlesen eines JSON-Objekts aus einer Datei:

InputStream is = new FileInputStream("filename.json");

JSONObject json = new JSONObject(new JSONTokener(is));

Einlesen eines JSON-Arrays aus einer Datei:

InputStream is = new FileInputStream("filename.json");

JSONArray arr = new JSONArray(new JSONTokener(is));

(12)

Einlesen von Dateien

Wenn eine JSON-Datei zusammen mit den class-Dateien des Programms geliefert werden soll, kann die Datei mit dem

Classloader geladen werden.

InputStream is =

ClassLoader.getSystemResourceAsStream(

"package/filename.json");

Die Datei filename.json wird dabei genau wie Klasssen aus der Package package geladen, sollte also im gleichen Verzeichnis stehen.

Das funktoniert auch, wenn Klassen und JSON-Datei in einem jar-Archiv verpackt sind.

(13)

Ausgabe von JSON-Daten

JSONObject json = new JSONObject();

json.put("type", "node");

json.put("id", "34");

json.put("lat", 31.3);

json.put("long", 12.8);

System.out.println(json);

Beispiel:

{"id":"34","type":"node","lat":31.3,"long":12.8}

Ausgabe:

(14)

Allgemeine Hinweise

JSON dient nur zum Datenaustausch. Verwenden Sie z.B. JSONObject nicht zur Datenspeicherung.

Beim Austausch von Text ist auf die Textkodierung zu achten.

Wir verwenden utf8.

Behandeln Sie bei der Programmierung alle möglichen

Fehlerfälle. JSON-Daten, die aus einer Datei gelesen werden, können nicht als wohlgeformt angenommen werden.

Referenzen

ÄHNLICHE DOKUMENTE

Personenbezogene Daten der betroffenen Person, dessen Einwilligung nicht eingeholt werden kann oder nicht gültig sein kann, können ohne die Einholung der Einwilligung

Im Folgenden informieren wir Sie über den Zweck und die rechtliche Grundlage, auf welcher wir die personenbezogenen Daten Ihres Kindes und von Ihnen erheben und verarbeiten, an

antragstellenden Person und von der an der Hochschule Trier die Promotion betreuenden Person eingetragenen personenbezogenen Daten durch die Hochschule

• b) Wenn der Verantwortliche der Beteiligung des weiteren Verarbeiters gemäß Abs. a) widerspricht, ist der Auftragsverarbeiter berechtigt, die Lieferung der Dienstleistungen, für

Wenn Sie es wünschen, teilen wir Ihnen mit, um welche Daten es sich handelt, für welche Zwecke die Daten verarbeitet werden, wem diese Daten offengelegt werden wie lange die

18 DSGVO die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen, soweit die Richtigkeit der Daten von Ihnen bestritten wird, die

Weitergegeben werden Angaben zum beruflichen Werdegang, Angaben zur Ausbildung und Qualifikation, Auskunftsangaben von Dritten oder aus öffentlichen Verzeichnissen,

• Wenn alle Spalten in der gleichen Reihenfolge wie in der Definition verwendet werden, können diese auch weggelassen werden. • Es können auch mehrere Tupel (Zeilen) durch