我使用杰克逊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"}')
Run Code Online (Sandbox Code Playgroud)
请注意,我无法提前知道输入 JSON 具有什么结构,因此 Jackson 默认将其解组Map(LinkedHashMap更准确地说)。我希望它输出一个字符串,其中键按字母顺序排序:
{"bar":"b","foo":"f"}
不幸的SORT_PROPERTIES_ALPHABETICALLY是,当要序列化的对象是Map. 如果我替换Map.class为FooBar.classJSON 属性,将按预期排序。但正如我所说,我无法提前知道输入 JSON 的类型,也无法在代码中为任何可能的类型创建一个类。对于杰克逊我还有什么其他选择?
这适用于顶级地图:
objectMapper.configure(
SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true
);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,它不会对您可能拥有的任何潜在嵌套映射中的键进行排序。
| 归档时间: |
|
| 查看次数: |
5521 次 |
| 最近记录: |