我使用 jackson 2.5.0。 我想编写一个方法,它接受任意 JSON 字符串,并使用 Jackson 按字母顺序对每个属性进行排序。包括嵌套的。
我了解到 Jackson 的 ObjectMapper 有一个 SORT_PROPERTIES_ALPHABETICALLY
功能,我想使用它来实现我的目标。所以我基于这个想法的初始代码是:
class FooBar {
String foo
String bar
}
def sortFields(String source) {
def om = new ObjectMapper().configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
def obj = om.readValue(source, Map.class)
return om.writeValueAsString(obj)
}
println sortFields('{"foo":"f","bar":"b"}')
请注意,我无法提前知道输入 JSON 具有什么结构,因此 Jackson 默认将其解码为 Map
(更准确地说是 LinkedHashMap
)。
我希望它输出一个字符串,其中键按字母顺序排序:
{"bar":"b","foo":"f"}
不幸的是,当要序列化的对象是Map
时,上面的代码段SORT_PROPERTIES_ALPHABETICALLY
不起作用。如果我用 FooBar.class
替换 Map.class
,我的 JSON 属性将按预期排序。但正如我所说,我无法提前知道输入 JSON 的类型,也无法在代码中为任何可能的类型创建一个类。我对 jackson 还有什么其他选择?
最佳答案
这适用于顶级 map :
objectMapper.configure(
SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true
);
遗憾的是,它不会对您可能拥有的任何潜在嵌套映射中的键进行排序。
关于 jackson 的 map SORT_PROPERTIES_ALPHABETICALLY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48986100/