Jackson JsonNode用排序键来串

elh*_*efe 23 java sorting jackson

我正在使用Jackson 2.2.3,需要将JsonNode树转换为带有排序字段键的字符串.我完全不清楚如何做到这一点,特别是因为相反的情况如此简单 - JsonNode jn = ObjectMapper.readTree(String s).

看来正确的方法是void writeTree(JsonGenerator jgen,JsonNode rootNode).但是,我认为没有办法String从序列化中获取序列化JsonGenerator.我认为这SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS仍然适用,因为JsonGenerator.Features没有那个选项.有没有更简单的方法 - 或者如果没有,我如何从JsonGenerator?检索序列化的字符串?

elh*_*efe 37

这是杰克逊的一位作者提供的最简单的方法.目前还没有任何办法从直行JsonNode至String与排序键.

private static final ObjectMapper SORTED_MAPPER = new ObjectMapper();
static {
    SORTED_MAPPER.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
}

private String convertNode(final JsonNode node) throws JsonProcessingException {
    final Object obj = SORTED_MAPPER.treeToValue(node, Object.class);
    final String json = SORTED_MAPPER.writeValueAsString(obj);
    return json;
}
Run Code Online (Sandbox Code Playgroud)

  • @Cherry通常在序列化之前对数组进行排序。杰克逊需要对地图进行排序的原因是因为地图没有固有的顺序。可以使用数组,因此应用程序可以在序列化为JSON之前根据需要对数组进行排序。通常,这对于地图是不可能的。 (2认同)