Pourquoi JsonNull dans GSON?

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 .