Beschreibt die Verwendung der Java JSON-Bibliothek minimal-json.
Bis jetzt (~ JDK 1.8) stellte Java standardmäßig keine JSON-Bibliothek zur Verfügung, daher war es erforderlich, eine Bibliothek zu verwenden, um JSON effizient zu handhaben. Das Folgende sind einige der berühmten OSS.
Library | License | Link |
---|---|---|
org.json | JSON | MVNRepository.com |
Jackson | Apache License 2.0 | GitHub/MVNRepository.com |
JSONIC | Apache License 2.0 | Official site/MVNRepository.com |
Gson | Apache License 2.0 | GitHub/MVNRepository.com |
JsonPath | Apache License 2.0 | GitHub/MVNRepository.com |
Sie können herausfinden, wie jede Bibliothek verwendet wird, indem Sie in Qiita oder im Internet suchen. Daher werde ich in diesem Artikel nicht darauf eingehen.
minimal-json? Wie der Name schon sagt, handelt es sich um eine kleine Java-Bibliothek, die sich auf das Lesen und Schreiben von JSON konzentriert. Veröffentlicht unter MIT-Lizenz. Mit Blick auf die README.md des Endlagers, kommt heraus, so dass sagen wollen: „Das ist wirklich das war?“ Graph zeigt die hohe Leistung.
Die Anzahl der Klassen ist nicht sehr groß, und es scheint, dass es in Version 0.9.4 nur 15 unten gibt. Die Dateigröße der JAR beträgt 29,7 KB.
https://github.com/ralfstx/minimal-json/tree/master/com.eclipsesource.json/src/main/java/com/eclipsesource/json
Laut der GitHub-Version war die letzte Version der 20.07.2015 und der letzte Commit war vor sechs Monaten 2016. / 10/25. Es scheint, dass die Entwicklung selbst noch andauert.
Wenn Sie nur einfaches JSON lesen und schreiben möchten, haben Gson und Jackson zu viele Funktionen, und org.json, das nur einfache Funktionen hat, verfügt über eine JSON-Lizenz [^ json], sodass unerwartet keine Auswahl getroffen wurde. .. Dieser Minimal-JSON kann nur zum Parsen von JSON verwendet werden. Wie oben erwähnt, besteht er jedoch nur aus 15 Klassen und der MIT-Lizenz. / LICENSE), daher kann es eine Alternative sein, wenn Sie org.json verwenden möchten.
Beachten Sie, dass diese Bibliothek nicht in der Lage ist, Objekten zuzuordnen, wie sie von Gson und Jackson bereitgestellt werden. Wenn Sie also eine solche Funktion benötigen, sollten Sie eine andere Bibliothek verwenden, als den Zuordnungscode selbst zu implementieren. Es ist besser, es zu benutzen.
Fügen Sie einfach eine Zeile zu den Abhängigkeiten in build.gradle hinzu. Zum Zeitpunkt des Schreibens des Artikels war die neueste Version 0.9.4.
Gradle
build.gradle
dependencies {
compile 'com.eclipsesource.minimal-json:minimal-json:0.9.4'
Maven
pom.xml
<dependency>
<groupId>com.eclipsesource.minimal-json</groupId>
<artifactId>minimal-json</artifactId>
<version>0.9.4</version>
</dependency>
Andere als die oben genannten finden Sie unter hier.
Sie können ein leeres Objekt mit new erstellen und den Schlüssel und den Wert mit der Methode add hinzufügen. Es kann sich um eine JSON-Zeichenfolge mit der Methode toString () handeln.
final JsonObject json = new JsonObject();
json.add("name", "Bill");
json.add("age", 24);
System.out.println(json.toString());
Ausgabe
{"name":"Bill","age":24}
Übergeben Sie die JSON-Zeichenfolge an Json # parse und rufen Sie das JSON-Objekt mit asObject () ab.
final JsonObject json = Json.parse(jsonStr).asObject();
Für String / int / double / float / long / boolean gibt es eine dedizierte get ~~ -Methode. Wenn der von Ihnen geladene JSON vollständig vom Anwendungsentwickler gesteuert wird und das Format festgelegt ist, können Sie diese Methoden verwenden.
Geben Sie den Schlüssel als Zeichenfolge an, um den Wert abzurufen. Geben Sie im zweiten Argument den Standardwert an, wenn kein Schlüssel vorhanden ist.
json.getString("name", "")
Angenommen, Sie haben einen einfachen JSON wie diesen:
{"name": "John", "age": 28}
Der Code zum Analysieren, Abrufen und Anzeigen des Werts in der Standardausgabe lautet wie folgt.
java
final JsonObject json = Json.parse("{\"name\": \"John\", \"age\": 28}").asObject();
System.out.println(json.getString("name", "-"));
System.out.println(json.getInt("age", -1));
Beachten Sie, dass `` age``` int ist. Wenn Sie also versuchen, es als String abzurufen, erhalten Sie
`java.lang.UnsupportedOperationException```.
Code mit Ausnahme
System.out.println(json.getString("age", "-"));
Ausnahmen und Meldungen
java.lang.UnsupportedOperationException: Not a string: 28
Wenn Sie den Wert von int als String abrufen möchten, können Sie mit toString () das JsonValue-Objekt mit get (key) abrufen.
System.out.println(json.get("age").toString());
Beachten Sie jedoch, dass json.get ("age") in diesem Fall null zurückgeben kann.
final JsonValue nullable = json.get("age");
if (nullable != null) {
System.out.println(nullable.toString());
}
Wenn Sie Optional verwenden können, sollten Sie es zusammen verwenden.
Optional.ofNullable(json.get("age"))
.map(JsonValue::toString)
.ifPresent(System.out::println);
Angenommen, Sie haben einen einfachen JSON wie diesen:
{"name": "John", "age": 28, "nullable": null}
Wenn ich versuche, getString "nullable" zu erhalten, wird der folgende Fehler angezeigt: Ich möchte, dass der defaultValue nützlich ist ...
java.lang.UnsupportedOperationException: Not a string: null
at com.eclipsesource.json.JsonValue.asString(JsonValue.java:389)
at com.eclipsesource.json.JsonObject.getString(JsonObject.java:674)
at jp.toastkid.libs.epub.EpubMetaData.readJson(EpubMetaData.java:114)
Übrigens kann die Ausnahme wie folgt vermieden werden, sie wird jedoch in der Standardausgabe als Null angezeigt.
Optional.ofNullable(json.get("nullable"))
.map(JsonValue::toString)
.ifPresent(System.out::println);
Ich dachte "Optional war eine solche Spezifikation" und führte den folgenden Code aus, um sie zu lösen. Diese Null ist keine Java-Null, sondern eine JSON-Literal-Null (com.eclipsesource.json.JsonLiteral. Es scheint, dass es als /main/java/com/eclipsesource/json/JsonLiteral.java)) interpretiert wurde.
Umfragecode
Optional.ofNullable(json.get("nullable"))
.map(Object::getClass)
.map(Class::getName)
.ifPresent(System.out::println);
Ausgabe
com.eclipsesource.json.JsonLiteral
Nun, ich denke, Sie haben es bemerkt, indem Sie es sich bisher angesehen haben. Wenn Sie mit Werten arbeiten, die in dieser Bibliothek aus JSON abgerufen wurden, ist es sicherer, sie mit get abzurufen und über das JsonValue-Objekt darauf zuzugreifen, und die Nullprüfung ist einfacher. In Kombination mit Optional funktioniert es besser.
JsonArray-Klasse implementiert Iterable ist. Da kein stream () vorhanden ist, kann die Stream-API nicht verwendet werden, und nur forEach wird als Methode bereitgestellt, die für die Iteration verwendet werden kann. Ich möchte mindestens Filter / Map.
Der Grund, warum ich Optional herausgebracht habe, ist, dass es keine Methode gibt, um die Existenz des Schlüssels zu überprüfen. Vor diesem Hintergrund denke ich, dass es ein bisschen schwierig ist, diese Bibliothek unter 1.7 zu verwenden ... Es ist Code mit vielen Null-Checks in if.
Wir haben die Funktionen und die Einführungsmethode der Java-Bibliothek minimal-json beschrieben, mit der Sie sehr einfaches JSON bedienen können. Es ist sicherer, get (key) zu verwenden, um den Wert abzurufen, und es fühlt sich besser an, ihn in Kombination mit Optional zu verwenden.
[^ json]: Die JSON-lizenzierte Bibliothek darf von Unternehmen verwendet werden, die eine konservative Richtlinie zur Verwaltung von Softwarelizenzen mit der Interpretation "Die Software wird zum Guten und nicht zum Bösen verwendet" eingeführt haben Es gibt Fälle, in denen dies nicht möglich ist. Es scheint die Ansicht zu bestehen, dass "JSON-Lizenz nicht auf den Code von org.json angewendet wird", aber es kann beurteilt werden, dass kein unnötiges Risiko eingegangen werden muss, solange es eine Alternative in der JSON-Bibliothek von Java gibt. Ich denke, es hat ein hohes Maß an Sexualität. Das Android SDK enthält übrigens org.jsons Bibliothek, aber es gibt ein bestimmtes Lizenzproblem. Ich habe nicht gehört, dass es gibt.
Recommended Posts