杰克逊的SORT_PROPERTIES_ALPHABETICALLY for Map

时间:2018-02-26 10:19:24

标签: jackson

我使用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的结构输入是什么,因此默认情况下,杰克逊将其解析为MapLinkedHashMap更为精确)。 我希望它输出一个字符串按字母顺序排序的字符串:

  

{"杆":" B""富":" F"}

不幸的是,如果要序列化的对象是SORT_PROPERTIES_ALPHABETICALLY,则Map上方的代码段不起作用。如果我用Map.class替换FooBar.class,我的JSON属性将按预期排序。但正如我所说,我无法提前知道一种输入JSON,并且在我的代码中有一个类可用于任何类型。杰克逊还有哪些其他选择?

1 个答案:

答案 0 :(得分:1)

这适用于顶层地图:

objectMapper.configure(
    SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true
);

遗憾的是,它无法对您可能拥有的任何潜在嵌套地图中的键进行排序。

相关问题