Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java EE 7: Web Services

Einlesen einer JSON-Struktur per Model-API

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Model-API stellt einen komfortablen Ansatz dar, um JSON-Strukturen einzulesen. Dieses Video erläutert, wie die Model-API funktioniert.

Transkript

Um eine Json-Struktur einzulesen und zu verarbeiten, kann man sicherlich verschiedene Ansätze wählen. Eine der einfachsten ist die Verwendung der Model-API aus der Java API for Json Processing. In diesem Video werden wir uns damit auseinandersetzen. Wir werden, wie die Model-API zum Einlesen funktioniert und wir werden auch ein kleines Beispiel umsetzen, mit dem wir den Inhalt einer Json-Struktur auslesen und dann entsprechend ausgeben können. Die Model-API verfolgt einen Ansatz analog zum XML-DOM Bei beiden Ansätzen, Model-API und XML-DOM, werden die einzelnen Bestandteile einer Struktur als Knoten betrachtet. Man navigiert dann auf diesem Knoten, schaut sie sich an und überlegt, was man dort für Inhalte hat und wie man diese verarbeiten kann. Das eigentliche Einlesen der Daten erfolgt mit Hilfe einer JsonReader-Instanz, die wir uns mit Hilfe der Json-Klasse erzeugen. Diese JsonReader-Instanz erlaubt es uns, das Dokument zu navigieren. Die wichtigste Methode dabei ist die Methode read. Diese liest den aktuellen Knoten ein und gibt ihn uns in Form einer JsonStructure-Repräsentation zurück. JsonStructure ist eine sehr generische Repräsentation, die später noch in konkrete Typen konvertiert wird. Die Methode readArray können wir benutzen, wenn wir wissen, dass es sich bei einem bestimmten Element um ein JsonArray handelt. Dann bekommen wir eine entsprechende Repräsentation in Form einer JsonArray-Instanz zurückgegeben. Wissen wir, dass es sich um ein Objekt handelt, können wir die Methode readObject benutzen. die uns den Knoten dann in Form einer JsonObject-Instanz zurückgibt. Wenn wir wissen, welchen Typ wir in der aktuellen JsonStructure-Instanz, also dem generischen Datentyp haben, können wir entsprechend auch in JsonArray, JsonObject oder weitere Datentypen konvertieren. Diese Information können wir mit Hilfe der Methode getValueType erhalten. Diese Methode gibt uns den Typ des aktuellen Inhalts zuück und das kann ich wie gesagt benutzen, um dann den aktuellen Knoten in den konkreten Datentyp zu konvertieren. Da gibt es dann die Datentypen JsonObject JsonArray, die also Objekte und Arrays repräsentieren, JsonValue, der einen generischen Wertetyp repräsentiert, und dann die konkreteren Wertetypen, JsonNumber und JsonString, die eine Zeichenkette beziehungsweise eine Zahl repräsentieren, JsonTrue und JsonFalse, die für Wahr- oder Falschwerte stehen, und JsonNull, der für einen Nullwert steht. Das eigentlichen Abrufen geschieht dann mit Hilfe von diversen GET-Methoden. die wir über die jeweils spezifische JsonStructure-Instanz erreichen können. Zum Beispiel über die Methode getJsonObject. Oder die Methode getJsonArray. Oder die Methode getJsonNumber. Und so weiter, und so fort. Die jeweils zurückgegebenen Instanzen, die wir über diese Methoden erhalten, verfügen über spezifische Methoden zum Abruf der Inhalte in typisierter Form. Nun wenden wir uns der Umsetzung des Einlesens einer Json-Struktur mit Hilfe der Model-API zu. Wir befinden uns hier in der Entwicklungsumgebung. In dieser Entwicklungsumgebung habe ich ein einfaches Java-Projekt angelegt. Bewusst kein Enterprise-Projekt, sondern ein normales Java-Projekt. In diesem Java-Projekt habe ich ebenfalls schon eine Datei angelegt. In der befindet sich eine Json-Struktur. Die Json-Struktur, ein einzelnes Objekt, besteht aus drei Feldern, name, actors und year mit den entsprechenden Werten. Dabei ist nur zu beachten, dass bei actors untergeordnet sich ein Array befindet und year beinhaltet einen numerischen Wert. Wir können uns nun direkt an die Implementierung machen. Wir wollten vorher allerdings noch einmal kurz innehalten und uns noch einige Gedanken machen. Ganz wesentlich ist nämlich, was für eine Art von Projekt wir gerade umsetzen. Wenn Sie ein Enterprise-Projekt umsetzen, also zum Beispiel ein Projekt, was auf dem WildFly-Server laufen soll und mit WildFly und dessen Komponenten implementiert wird, müssen Sie gar nichts weiter machen. Dann steht Ihnen das entsprechende Package javax.Json bereits zur Verfügung. Wenn Sie allerdings wie hier mit einem Client-Projekt arbeiten, haben Sie ein Problem, denn im JDK 7 und 8 befindet sich noch keine Implementierung von JsonP mit enthalten. Daher benötigen wir eine Referenz-Implementierung. Eine Referenz-Implentierung gibt es zum Beispiel vom Glassfish Project. Die kann man sich allerdings nicht direkt von deren Homepage runterladen, sondern sie muss entweder über Maven referenziert werden oder wir müssen direkt an das JAR-Archiv herankommen für den Download. Über Maven ist das relativ einfach möglich. Wir suchen einfach nach javax.Json. Wenn Sie allerdings kein Maven-Projekt haben oder haben wollen, dafür gibt es ja durchaus Gründe, müssen Sie versuchen, selber an das JAR-Archiv ranzukommen. Das habe ich bereits einmal gemacht. Und zwar im Maven-Repository kann man dann einfach nach javax.Json suchen und dann befindet man sich relativ schnell auf dieser Seite wo man dann einen Default-Provider, also Standardimplementierung, herunterladen kann. Ich entscheide ich für die Version 1.0.4. Diese lade ich dann durch Klick auf den Link Download (Bundle) herunter. Nachdem ich sie heruntergeladen habe, kann ich sie meinem Eclipse-Projekt hinzufügen. Zu diesem Zweck ziehe ich sie einfach auf das Projekt, kopiere das Archiv da rein und kann nun den Klassenpfad anpassen. Das mache ich durch einen Rechtsklick auf das Projekt und Klick auf Properties Dann wechsle ich in den Bereich Ich klicke im Reiter Libraries auf den Eintrag Add JARS und füge dann das JAR als Referenz hinzu. Nun sind wir einsatzfähig. Wir können uns tatsächlich an die Implementierung einer einlesenden Klasse machen. Diese einlesende Klasse nennt sich Object Reader. Sie befindet sich im Package de.video2brain.Json. Da ich sie von der Konsole aufrufen möchte, füge ich noch eine Public Static Void- Methode hinzu namens Main und mit einem String-Array als Parameter. Die sind ja erforderlich, damit ich die Methode von der Kommandozeile aus aufrufen kann. Nun kann ich mich der eigentlichen Implementierung widmen. Diese findet so statt, dass ich zunächst eine JsonReader-Instanz referenziere. Das mache ich über die statische Methode JsonCreateReader. Diese CreateReader-Methode erfordert dann die Angabe eines File Input Streams. Hier kann ich dann auf die Datei movie.Json verweisen, in der meine Json-Struktur definiert ist. Beim Einlesen kann es zu einer Exception kommen. Deswegen füge ich einfach die entsprechende Throws-Deklaration der Methodensignatur hinzu. Die Methode READ dieser JsonReader-Instanz gibt mir dann eine JsonStructure-Instanz zurück. Nun kann ich überprüfen, was deren Inhaltstyp ist. Ich weiß ziemlich genau, dass es sich um ein Objekt handeln wird, dennoch überprüfe ich das lieber nochmal und zwar mache ich das über die Methode getValueType. Da bekomme ich die entsprechende Information zurück, um welchen Inhaltstyp es sich handelt. Ich überprüfe darauf, ob es sich um ein Objekt handelt. Nur wenn es sich um ein Objekt handelt, mache ich jetzt weiter. Nachdem ich sicher bin, dass es sich um ein Objekt handelt, erzeuge ich mir eine JsonObject-Instanz. Die bekomme ich, indem ich die JsonStructure-Instanz die ich bereits habe, nach JsonObject konvertiere. Nun kann ich die mich interessierenden Werte abrufen. Zunächst einmal den Namen. Den repräsentiere ich in Form einer JsonValue-Instanz. Ich greife dann über rootObject.getJsonstring darauf zu und gebe hier den Namen des Elementes an. Ich könnte auch direkt getString sagen. Wenn die Komponente aber nicht existieren würde, gäbe es mir dann aber nur Null zurück. Das ist bei einer Zeichenkette kein großes Problem, würde aber zu komischen Situationen führen, wenn ich zum Beispiel Zahlen oder Boolesche Werte abriefe. Daher gehe ich immer den Umweg über JsonValue und kann dann überprüfen, ob es sich wirklich um das handelt, was ich erwarte. Nämlich ob es sich wirklich um einen String handelt und nicht etwa um Null oder ähnliches. Nachdem das sichergestellt ist, kann ich dann die entsprechende Information, in unserem Fall, einfach ausgeben. Ich komme dann an den textuellen Inhalt über die Methode name.getString heran. Dafür muss ich das Ding allerdings noch einmal konvertieren in eine JsonString-Instanz. Analog gehe ich nun vor, um die Schauspieler abzurufen. Hier handelt es sich um ein Array. Deswegen verwende ich eine JsonArray-Instanz. Ich greife darauf über die Methode getJsonArray zu. Das Feld ist actors. Wenn ich diese actors laden konnte, kann ich sie nun entsprechend durchlaufen und dann ausgeben. Dieses JsonArray verfügt über eine Eigenschaft size. Die gibt mir die Anzahl der Elemente zurück und nun kann ich auf das einzelne Element zugreifen indem ich die Methode getString in dem Fall direkt aufrufe unter Angabe des Indices. Zuletzt lese ich noch die Ziffer ein. Das ist eine JsonNumber, also die Jahreszahl. Das Feld heißt year. Und wenn das existiert, kann ich es auch ausgeben. Und zwar hole ich mir den numerischen Wert über die Methode intValue auf dieser JsonNumber-Instanz. Damit ist die Verarbeitung soweit abgeschlossen. Wir können das Ganze mal ausführen. Wenn wir's laufen lassen, sehen wir die entsprechenden Informationen, die wir eingelesen haben, werden eingelesen und verarbeitet und ausgegeben. In diesem Video haben wir uns damit auseinandergesetzt, wie wir mit Hilfe der Model-API ein Json-Dokument oder Json-Struktur einlesen können. Wir haben uns mit den verschiedenen Ansätzen, um an Informationen heranzukommen, auseinandergesetzt. und haben auch geklärt, wo wir im Zweifelsfall eine Referenzimplementierung dieser Model-API erhalten können, falls wir nicht die Abhängigkeiten über Maven verwalten wollen oder falls wir diese Funktionalität in einem normalen Java-Projekt und nicht auf Ebene eines Java EE-Projekts nutzen wollen.

Java EE 7: Web Services

Steigen Sie ein in die Java-Enterprise-Welt und lernen Sie, wie Nachrichten ausgetauscht und Dienste definiert werden.

5 Std. 13 min (30 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!