jackson 的 map SORT_PROPERTIES_ALPHABETICALLY

标签 jackson

我使用 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/

相关文章:

java - 如何在 Jackson2 中使用多参数构造函数反序列化枚举?

java jackson XML - 解析时如何忽略外部包装?

java - jackson 序列号 : Setting field value as XML element name

java - 如何使用 Jackson 反序列化此 JSON?

java - 使用 Jackson 解析 XML 时出现 MismatchedInputException

java - Jackson 功能 ACCEPT_SINGLE_VALUE_AS_ARRAY 不适用于注释

java - 从 JSON HAL 响应解析 _embedded 项

java - 如何从 Spring Boot 中的 Rest Controller 中的 REST 请求获取日历字段?

java - 如何使用 ObjectMapper 将空 JSON 文件反序列化为 Java 对象

java - Jackson 通过类名创建对象