加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:40:17 所属栏目:Java 来源:网络整理
导读:我使用jackson.map.ObjectMapper API将map转换为json字符串.我使用writeValueAsString方法来实现这一点. 我传递了一个基于值排序的map到writeValueAsString方法.我得到的JSON字符串是基于键的. 有没有办法使用jackson将地图转换为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的一个实现,它保存了键插入到地图中的顺序.这可能是你正在寻找的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读