JSON ORDER_MAP_ENTRIES_BY_KEYS无法始终如一地工作

时间:2016-01-15 18:33:39

标签: java json

我正在尝试ORDER_MAP_ENTRIES_BY_KEYS,按照我在这个问题中读到的内容:

[Jackson JsonNode to string with sorted keys

但是在打印JsonNode对象时它似乎不起作用。

例如,以下代码:

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);

HashMap<String,String> personHashMap = new HashMap<String,String>();
personHashMap.put("First", "Joe");
personHashMap.put("Last", "Bloe");
personHashMap.put("Age",  "32");
System.out.println("-- Printing personHashMap         gives:\n"+mapper.writeValueAsString(personHashMap));

String personJsonNode =
    "{\"Last\": \"Bloe\", \"First\": \"Joe\", \"Age\": \"32\"}";
JsonNode personJsonObj = mapper.readTree(personJsonNode);
System.out.println("-- Printing personJsonNode     gives:\n"+mapper.writeValueAsString(personJsonObj));

打印以下输出:

-- Printing personHashMap gives:

{
  "Age" : "32",
  "First" : "Joe",
  "Last" : "Bloe"
}
-- Printing personJsonNode gives:

{
  "Last" : "Bloe",
  "First" : "Joe",
  "Age" : "32"
}

注意personH​​ashMap是如何按键排序的,而不是personJsonNode对象。

我做错了什么? THX。

1 个答案:

答案 0 :(得分:4)

这是因为ORDER_MAP_ENTRIES_BY_KEYS仅适用于Maps,而不是JsonNodes(这是一个奇怪的设计决定,但是......)。这就是为什么您引用的答案会将JsonNode树转换为Object之前进行字符串化。您需要在代码中执行相同的操作。