我正在使用jackson.map.ObjectMapperAPI将地图转换为json字符串.我使用writeValueAsString方法来实现这一点.
我将基于值排序的地图传递给writeValueAsString方法.我得到的JSON字符串是基于键的.
有没有办法使用jackson将地图转换为JSON字符串,而不会干扰地图中项目的顺序.
我尝试设置Feature.SORT_PROPERTIES_ALPHABETICALLY为false,但根据文档,它仅适用于POJO类型.
任何想法实现上述行为.
pde*_*dem 12
使用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));
}
Run Code Online (Sandbox Code Playgroud)
这是结果:`
用地图
{
"aaa" : "AAA",
"ddd" : "DDD",
"ccc" : "CCC",
"bbb" : "BBB"
}
Run Code Online (Sandbox Code Playgroud)
使用SortedMap
{
"aaa" : "AAA",
"bbb" : "BBB",
"ccc" : "CCC",
"ddd" : "DDD"
}
Run Code Online (Sandbox Code Playgroud)
`
第一个带有Map的序列化将不会被排序,带有TreeMap的第二个序列化将使用键按字母顺序排序.您可以将比较器传递给treeMap以获取不同的顺序.
编辑:即使这不是SortedMap,它也可以在Jackson上使用LinkedHashMap().这是Map的一个实现,它保持键被插入到地图中的顺序.这可能是你正在寻找的.
| 归档时间: |
|
| 查看次数: |
18757 次 |
| 最近记录: |