微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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的一个实现,它保存了键插入到地图中的顺序.这可能是你正在寻找的.

原文地址:https://www.jb51.cc/java/129419.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐