我使用Jackson 2.5.0。 我想编写一个方法,它接受任意JSON字符串,并按照字母顺序用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的结构输入是什么,因此默认情况下,杰克逊将其解析为Map
(LinkedHashMap
更为精确)。
我希望它输出一个字符串按字母顺序排序的字符串:
{"杆":" B""富":" F"}
不幸的是,如果要序列化的对象是SORT_PROPERTIES_ALPHABETICALLY
,则Map
上方的代码段不起作用。如果我用Map.class
替换FooBar.class
,我的JSON属性将按预期排序。但正如我所说,我无法提前知道一种输入JSON,并且在我的代码中有一个类可用于任何类型。杰克逊还有哪些其他选择?
答案 0 :(得分:1)
这适用于顶层地图:
objectMapper.configure(
SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true
);
遗憾的是,它无法对您可能拥有的任何潜在嵌套地图中的键进行排序。