使用Gson将Java对象转换为JsonObject

use*_*582 11 java json gson

我有一个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"
Run Code Online (Sandbox Code Playgroud)

但是,它感觉很糟糕,因为我必须将Java对象输出到String,然后从String创建一个JsonElement,然后将JsonElement转换为JsonObject.

有没有更直接的方法从Java对象转到JsonObject?

Sot*_*lis 18

你不需要中间人String.将Java对象JsonElement直接序列化为Gson#toJsonTree(Object).将该值转换为您期望的任何类型(JSON对象,数组或基元),执行删除并调用其toString()方法以将其JSON表示检索为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();
Run Code Online (Sandbox Code Playgroud)

如果要跳过最后创建的对象Gson#toJson,可以始终使用接受a 的重载JsonElement将其直接序列化为流String.