Décrit comment utiliser la bibliothèque Java JSON minimal-json.
Jusqu'à présent (~ JDK 1.8) Java ne fournissait pas de bibliothèque JSON en standard, il était donc nécessaire d'utiliser une bibliothèque pour gérer efficacement JSON. Voici quelques-uns des célèbres 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 |
Vous pouvez découvrir comment utiliser chaque bibliothèque en recherchant Qiita ou Internet, donc je ne vais pas le couvrir dans cet article.
minimal-json? Comme son nom l'indique, il s'agit d'une petite bibliothèque Java axée sur la lecture et l'écriture de JSON. Publié sous Licence MIT. En regardant le README.md du dépôt, sortira de telle sorte que veulent dire: « Ce fut vraiment? » Graphique montrant la haute performance.
Le nombre de classes n'est pas très grand, et il semble qu'il n'y en ait que 15 ci-dessous dans la version 0.9.4. La taille du fichier du pot est de 29,7 Ko.
https://github.com/ralfstx/minimal-json/tree/master/com.eclipsesource.json/src/main/java/com/eclipsesource/json
Selon la version GitHub, la dernière version datait du 20/07/2015 et le dernier commit datait de six mois 2016. / 10/25. Il semble que le développement lui-même est toujours en cours.
Si vous voulez juste lire et écrire du JSON simple, Gson et Jackson ont trop de fonctions, et org.json, qui n'a que des fonctions simples, a une licence JSON [^ json], donc il n'y avait pas de choix inattendu. .. Ce minimal-json ne peut être utilisé que pour analyser JSON, mais comme mentionné ci-dessus, il ne comprend que 15 classes et la licence MIT / LICENSE), cela peut donc être une alternative si vous souhaitez utiliser org.json.
Notez que cette bibliothèque n'a pas la capacité de mapper aux objets fournis par Gson et Jackson, donc si vous avez besoin d'une telle fonctionnalité, vous devez utiliser une bibliothèque différente de celle d'implémenter vous-même le code de mappage. Il vaut mieux l'utiliser.
Ajoutez simplement une ligne aux dépendances dans build.gradle. Au moment de la rédaction de l'article, la dernière version était la 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>
Autre que ce qui précède, veuillez voir ici.
Vous pouvez créer un objet vide avec new et y ajouter la clé et la valeur avec la méthode add. Il peut s'agir d'une chaîne JSON avec la méthode toString ().
final JsonObject json = new JsonObject();
json.add("name", "Bill");
json.add("age", 24);
System.out.println(json.toString());
production
{"name":"Bill","age":24}
Passez la chaîne JSON à Json # parse et récupérez l'objet JSON avec asObject ().
final JsonObject json = Json.parse(jsonStr).asObject();
Pour String / int / double / float / long / boolean, il existe une méthode get ~~ dédiée. Si le JSON que vous chargez est entièrement sous le contrôle du développeur de l'application et que le format est fixe, vous pouvez utiliser ces méthodes.
Spécifiez la clé sous forme de chaîne pour récupérer la valeur. Pour le deuxième argument, spécifiez la valeur par défaut en l'absence de clé.
json.getString("name", "")
Par exemple, supposons que vous ayez un JSON simple comme celui-ci:
{"name": "John", "age": 28}
Le code pour analyser cela, récupérer la valeur et l'afficher dans la sortie standard est le suivant.
java
final JsonObject json = Json.parse("{\"name\": \"John\", \"age\": 28}").asObject();
System.out.println(json.getString("name", "-"));
System.out.println(json.getInt("age", -1));
Notez que age
est un entier, donc si vous essayez de le récupérer sous forme de chaîne, vous obtiendrez
java.lang.UnsupportedOperationException```.
Code avec exception
System.out.println(json.getString("age", "-"));
Exceptions et messages
java.lang.UnsupportedOperationException: Not a string: 28
Si vous souhaitez récupérer la valeur de int en tant que String, vous pouvez utiliser toString () sur l'objet JsonValue récupéré par get (key).
System.out.println(json.get("age").toString());
Cependant, notez que json.get ("age") peut retourner null dans ce cas.
final JsonValue nullable = json.get("age");
if (nullable != null) {
System.out.println(nullable.toString());
}
Si vous pouvez utiliser Facultatif, vous devez l'utiliser ensemble.
Optional.ofNullable(json.get("age"))
.map(JsonValue::toString)
.ifPresent(System.out::println);
Par exemple, supposons que vous ayez un JSON simple comme celui-ci:
{"name": "John", "age": 28, "nullable": null}
Lorsque j'essaye de getString "nullable", j'obtiens l'erreur suivante: J'aimerais que la valeur defaultValue soit utile ...
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)
À propos, l'exception peut être évitée avec ce qui suit, mais elle est affichée comme nulle dans la sortie standard.
Optional.ofNullable(json.get("nullable"))
.map(JsonValue::toString)
.ifPresent(System.out::println);
J'ai pensé que "facultatif était une telle spécification" et j'ai exécuté le code suivant pour le résoudre. Ce null n'est pas un null Java mais un littéral JSON null (com.eclipsesource.json.JsonLiteral Il semble qu'il ait été interprété comme /main/java/com/eclipsesource/json/JsonLiteral.java)).
Code d'enquête
Optional.ofNullable(json.get("nullable"))
.map(Object::getClass)
.map(Class::getName)
.ifPresent(System.out::println);
production
com.eclipsesource.json.JsonLiteral
Eh bien, je pense que vous l'avez remarqué peu de temps après l'avoir regardé jusqu'à présent. Lorsqu'il s'agit de valeurs extraites de JSON dans cette bibliothèque, il est plus sûr de les récupérer avec get et d'y accéder via un objet JsonValue, et la vérification des valeurs nulles est plus facile. Cela fonctionne mieux lorsqu'il est combiné avec facultatif.
La classe JsonArray implémente Iterable est. Puisqu'il n'y a pas de stream (), l'API Stream ne peut pas être utilisée, et seul forEach est fourni en tant que méthode pouvant être utilisée pour l'itération. Je veux au moins un filtre / une carte.
La raison pour laquelle j'ai sorti Optional est qu'il n'y a pas de méthode pour vérifier l'existence de la clé. Eh bien, dans cet esprit, je pense que c'est un peu difficile d'utiliser cette bibliothèque en dessous de 1.7 ... C'est un code avec beaucoup de vérifications nulles si.
Nous avons décrit les fonctionnalités et la méthode d'introduction de la bibliothèque Java minimal-json, qui vous permet d'utiliser JSON très facilement. Il est plus sûr d'utiliser get (key) pour récupérer la valeur, et il est préférable de l'utiliser en combinaison avec Optional.
[^ json]: La bibliothèque sous licence JSON est autorisée à être utilisée par les entreprises qui ont adopté une politique de gestion des licences logicielles conservatrice avec l'interprétation de `` Le logiciel doit être utilisé pour le bien, pas le mal ''. Il y a des cas où cela ne peut pas être fait. Il semble y avoir une vue selon laquelle "la licence JSON n'est pas appliquée au code de org.json", mais on peut juger qu'il n'y a pas besoin de prendre des risques inutiles tant qu'il existe une alternative dans la bibliothèque JSON de Java. Je pense qu'il a un haut degré de sexualité. Au fait, le SDK Android inclut la bibliothèque de org.json, mais il y a un problème surtout en termes de licence. Je n'ai pas entendu qu'il y en a.
Recommended Posts