La documentation indique que la méthode JsonObject # get renvoie null si aucun membre de ce type n’existe. Ce n’est pas exact Parfois, un object JsonNull
est renvoyé au lieu de null
.
Quel est le langage utilisé pour vérifier si un champ particulier existe dans GSON? Je souhaite éviter ce style maladroit:
jsonElement = jsonObject.get("optional_field"); if (jsonElement != null && !jsonElement.isJsonNull()) { s = jsonElement .getAsSsortingng(); }
Pourquoi GSON a-t-il utilisé JsonNull
au lieu de null
?
Il existe une réponse aux différences entre null
et JsonNull
. Dans ma question ci-dessus, je cherche les raisons pour lesquelles.
Gson, vraisemblablement, voulait modéliser la différence entre l’absence de valeur et la présence de la valeur JSON null
dans le fichier JSON. Par exemple, il y a une différence entre ces deux extraits JSON
{} {"key":null}
votre application pourrait les considérer comme identiques, mais pas le format JSON.
Appel
JsonObject jsonObject = new JsonObject(); // {} jsonObject.get("key");
renvoie la valeur Java null
car aucun membre n’existe avec ce nom.
Appel
JsonObject jsonObject = new JsonObject(); jsonObject.add("key", JsonNull.INSTANCE /* or even null */); // {"key":null} jsonObject.get("key");
renvoie une instance de type JsonNull
(le singleton référencé par JsonNull.INSTANCE
) car un membre existe avec ce nom et sa valeur est JSON null, représentée par la valeur JsonNull
.