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



我有一个项目,我需要支持使用杰克逊和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而不是杰克逊JsonNode是否会降低性能(mapper.convertValue(object, ..) vs. mapper.valueToTree(object) (?

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

克逊的ObjectNode在内部使用LinkedHashMap(ArrayNode使用ArrayList(,所以这些方法之间应该没有太大区别。 JsonNode模型可以优化一些比"原始"ListMap s稍微好的东西;但另一方面,有薄包装器增加了一些内存使用量......所以最终事情可能会平分秋色。

最新更新