J'ai un objet Java, et je veux le sortir sous forme de chaîne JSON. MAIS je veux éviter d'imprimer une propriété dans l'objet Java. I sachez que je pourrais le faire en utilisant la méthode excludeFieldsWithoutExposeAnnotation () de GsonBuilder. Cependant, j'ai pensé essayer la méthode alternative de supprimer la propriété du JsonObject avant de l'imprimer. Le code suivant fonctionne:
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd' 'HH:mm:ss").create();
String javaObjectString = gson.toJson(javaObject);
//javaObjectString currently include "property":"value"
JsonElement jsonElement = gson.toJsonTree(javaObjectString, javaObject.getClass());
JsonObject jsonObject = (JsonObject) jsonElement;
jsonObject.remove("property");
javaObjectString = gson.toJson(jsonObject);
//javaObjectString currently no longer includes "property":"value"
Cependant, cela semble un mais hacky car je dois sortir l'objet Java sur une chaîne, puis créer un JsonElement à partir de la chaîne, puis convertir le JsonElement en un JsonObject.
Existe-t-il un moyen plus direct de passer d'un objet Java à un JsonObject?
Vous n'avez pas besoin de l'intermédiaire String
. Sérialisez votre Java dans un JsonElement
directement avec Gson#toJsonTree(Object)
. Convertissez cette valeur dans le type que vous attendez (objet JSON, tableau ou primitif), effectuez votre suppression et appelez sa méthode toString()
pour récupérer sa représentation JSON en tant que String
.
Par exemple,
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd' 'HH:mm:ss").create();
// JSON data structure
JsonElement jsonElement = gson.toJsonTree(javaObject);
JsonObject jsonObject = (JsonObject) jsonElement;
// property removal
jsonObject.remove("property");
// serialization to String
String javaObjectString = jsonObject.toString();
Vous pouvez toujours utiliser le Gson#toJson
surcharge qui accepte un JsonElement
pour le sérialiser directement dans un flux si vous voulez ignorer la dernière création d'objet String
.