如何使用新值对象进行jsonify?

时间:2018-03-03 21:58:19

标签: java json gson

我有一些具有不同属性类型的对象:StringFloatLocalDate等等。要将此对象转换为json String,我使用(com.google.gson.Gson

gson.toJson(object);

但现在我要为其添加String

{
  "warning" : "old",
  --Jsonified Object--
}

如何在不执行样板代码或创建具有新属性和旧属性的新对象的情况下,将特定键值数据添加到对象中?

2 个答案:

答案 0 :(得分:2)

在不创建新类或修改当前内容的情况下,最简单的方法是使用地图。当然它仍然需要一些样板,但你可以创建一个方法来完成所有这些。

使用Gson从已生成的json开始,您可以创建一个地图,修改此地图,然后再次创建json。

Gson gson = new Gson();
Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());

// here you process the map, e.g. put or remove keys
map.put("warning", "old");

String json = gson.toJson(myMap);

如果您不想从创建的JSON开始,我建议使用jackson对象映射器在地图中转换对象,然后处理地图并创建json。您应该使用像jackson这样的另一个库,因为Gson没有提供将对象转换为地图的方法。

答案 1 :(得分:2)

您可以使用com.google.gson.JsonObject类添加额外字段。

JsonObject jsonObject = (JsonObject)gson.toJsonTree(object, YourObjects.class);
jsonObject.addProperty("warning" , "old"); // add required extra fields
String json = gson.toJson(jsonObject); // create son string