我正在尝试用 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/