【问题标题】:Using Gson convert Java object into JsonObject使用 Gson 将 Java 对象转换为 JsonObject
【发布时间】:2017-11-09 03:22:07
【问题描述】:

我有一个 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 对象输出到 String,然后从 String 创建一个 JsonElement,然后将 JsonElement 转换为 JsonObject。

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

【问题讨论】:

    标签: java json gson


    【解决方案1】:

    您不需要中介String。直接使用Gson#toJsonTree(Object) 将您的Java 对象序列化为JsonElement。将该值转换为您期望的任何类型(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();
    

    如果您想跳过最后的String 对象创建,您始终可以使用接受JsonElementGson#toJson 重载将其直接序列化为流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-14
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多