我有一个项目,我需要支持使用杰克逊和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);
将模型
Object
转换为Map
而不是杰克逊JsonNode
是否会降低性能(mapper.convertValue(object, ..)
vs.mapper.valueToTree(object)
(?是否可以使用 GSON 直接将模型
Object
转换为Map
?现在我首先创建一个JsonElement
,然后将其转换为Map
。
克逊的ObjectNode
在内部使用LinkedHashMap
(ArrayNode
使用ArrayList
(,所以这些方法之间应该没有太大区别。 JsonNode
模型可以优化一些比"原始"List
和Map
s稍微好的东西;但另一方面,有薄包装器增加了一些内存使用量......所以最终事情可能会平分秋色。