Jackson Object mapper将java地图转换为json维护键的顺序

我使用jackson.map.ObjectMapper API将map转换为json字符串.我使用writeValueAsstring方法来实现这一点.

我传递了一个基于值排序的map到writeValueAsstring方法.我得到的JSON字符串是基于键的.

有没有办法使用jackson将地图转换为JSON字符串,而不会干扰地图中项目的顺序.

我尝试将Feature.soRT_PROPERTIES_ALPHABETICALLY设置为false,但根据文档,它仅适用于POJO类型.

任何想法实现上述行为.

解决方法

使用Jackson 2.3.1(不知道以前的版本)你可以序列化一个SortedMap,例如一个TreeMap,该命令将得到尊重.

以下是junit 4的示例:

@Test
public void testSerialize() throws JsonProcessingException{
    ObjectMapper om = new ObjectMapper();
    om.configure(SerializationFeature.WRITE_NULL_MAP_VALUES,false);
    om.configure(SerializationFeature.INDENT_OUTPUT,true);
    om.setSerializationInclusion(Include.NON_NULL);

    SortedMap<String,String> sortedMap = new TreeMap<String,String>();
    Map<String,String> map = new HashMap<String,String>();
    map.put("aaa","AAA");

    map.put("bbb","BBB");
    map.put("ccc","CCC");
    map.put("ddd","DDD");

    sortedMap.putAll(map);

    System.out.println(om.writeValueAsstring(map));

    System.out.println(om.writeValueAsstring(sortedMap));


}

这是结果:`

用地图

{
  "aaa" : "AAA","ddd" : "DDD","ccc" : "CCC","bbb" : "BBB"
}

使用SortedMap

{
  "aaa" : "AAA","bbb" : "BBB","ddd" : "DDD"
}

`

带有Map的第一个序列化将不会被订购,
带有TreeMap的第二个将使用键按字母顺序排序.您可以将比较器传递给treeMap以获取不同的顺序.

编辑:即使这不是SortedMap,它也可以在Jackson上使用LinkedHashMap().这是Map的一个实现,它保存了键插入到地图中的顺序.这可能是你正在寻找的.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...