我使用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 举报,一经查实,本站将立刻删除。