使用Jackson / GSON序列化的中间模型(Map)进行性能损失

时间:2018-03-24 07:19:59

标签: json performance serialization jackson gson

我有一个项目,我需要使用Jackson和GSON(可切换)支持将模型类序列化为JSON。

除了简单地将这些模型类转换为JSON之外,我还需要通过添加/删除某些键来操作(根据用户输入)。

我正在考虑将我的模型类(以及删除/添加数据的逻辑)转换为简单的java.util.Map并将它们转换为JSON。哪个有用。

要将这些模型类转换为杰克逊的java.util.Map,我正在做:

Map<String, Object> jsonMap = 
    mapper.convertValue(object, new TypeReference<Map<String, Object>() {})

和GSON:

JsonElement jsonElement = gson.toJsonTree(object);
Map<String, Object> jsonMap = 
    gson.fromJson(jsonElement, new TypeToken<Map<String, Object>>(){}.getType());

在操作地图中的数据之后,我执行以下操作以将地图实际序列化为JSON字符串:

// Jackson
mapper.writeValueAsString(jsonMap);
// GSON
gson.toJson(jsonMap);
  1. 将模型Object转换为Map而不是杰克逊JsonNodemapper.convertValue(object, ..)mapper.valueToTree(object)相比,是否会影响效果

  2. 是否可以使用GSON直接将模型Object转换为Map?现在我首先创建一个JsonElement,然后将其转换为Map

1 个答案:

答案 0 :(得分:0)

杰克逊ObjectNode在内部使用LinkedHashMapArrayNode使用ArrayList),因此这些方法之间应该没有太大区别。 JsonNode模型可以比“&#34; raw&#34; ListMap s;但另一方面,有一个薄的包装器,增加了一些内存使用...所以最后事情可能会出来。