json - 使用 Jackson 序列化带有排序键的 JSON

标签 json grails groovy jackson

我正在尝试用 Jackson 替换 groovy/grails 项目中的自定义 JSON(反)序列化。

我无法让 jackson 输出一个打印精美的 JSON,其中的键按简单的“自然”字母顺序排序。
我已经尝试过这个(以及许多变体):

mymap = [ ... ] // Some groovy map
def mapper = new ObjectMapper()
mapper.configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
def jsonstring = mapper.defaultPrettyPrintingWriter().writeValueAsString(mymap)

但是 jackson 顽固地生成了一个 JSON,其中的键似乎是随机顺序的。
我尝试使用 TreeMap 更改“mymap”的类型,在这种情况下,所有键都按预期正确排序。

我想知道是否有办法对键进行排序 没有 将上面的“mymap”更改为 TreeMap(并递归地更改其所有 map 值......)。

SORT_PROPERTIES_ALPHABETICALLY 似乎正是为了做到这一点,但由于某种原因它没有这样做。
你知道这是为什么吗?上面有什么我做错了吗?

我尝试过使用 Jackson 1.8.3、1.8.8 和 1.9.5,结果相同(随机键)。

最佳答案

正如@tim_yates 所说,这不适用于 map 键。

你可以使用

mapper.configure(SerializationConfig.Feature.ORDER_MAP_ENTRIES_BY_KEYS, true)

对于较新的版本 (>= 2.6.1),API 更改为:
mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);

关于json - 使用 Jackson 序列化带有排序键的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476426/

相关文章:

Grails 全局错误处理程序

java - 从 Json 到 groovy 代码的转换器?

php - 无法从 JSON 数据显示 Google Gauge

java - 正则表达式查找部分输入是否是有效的 JSON

json - Proc json 在应用格式后产生额外的空白

javascript - jQuery $.ajax 和 $.each 循环遍历数组

grails - Grails-在不更改URL的情况下检索“注册”页面或主页

eclipse - 在 MAC 中找到 ggts.ini

jenkins - 从 jenkinsfile 执行 groovy 脚本时出现异常 groovy.lang.MissingPropertyException : No such property: args for class: groovy. lang.Binding

unit-testing - 生成了Grails 2单元测试,但未按预期运行,并产生运行时错误