使用 Gson 将 Java 对象转换为 JsonObject

2022-09-01 23:02:32

我有一个Java对象,我想将其输出为JSON字符串。但是我想避免在Java对象中打印出属性。我知道我可以使用GsonBuilder的excludeFieldsWithoutExposeAnnotation()方法来做到这一点。但是,我想我会尝试另一种方法,在打印出来之前从JsonObject中删除该属性。以下代码有效:

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"

但是,这感觉很麻烦,因为我必须将Java对象输出到字符串,然后从字符串创建JsonElement,然后将JsonElement转换为JsonObject。

有没有一种更直接的方法可以从Java对象到JsonObject?


答案 1

你不需要中介。使用 将 Java 对象直接序列化为将该值强制转换为所需的任何类型(JSON 对象、数组或基元),执行删除并调用其方法以检索其 JSON 表示形式。StringJsonElementGson#toJsonTree(Object)toString()String

例如

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();

如果要跳过最后一次对象创建,则始终可以使用接受 的重载将其直接序列化为流。Gson#toJsonJsonElementString


答案 2