如何使用jackson将json数组转换为java hashmap
我想使用jackson将下面的json数组转换为java hashmap,并迭代如下值: 需要这样的输出:如何使用jackson将json数组转换为java hashmap,java,json,dictionary,hashmap,jackson,Java,Json,Dictionary,Hashmap,Jackson,我想使用jackson将下面的json数组转换为java hashmap,并迭代如下值: 需要这样的输出: key Value 1 sql 2 android 3 mvc JSON示例: 在这里输入代码 { "menu": [ { "1": "sql", "2": "android", "3": "mvc" } ] } 如果有人能分享代码来实现这一点,
key Value
1 sql
2 android
3 mvc
JSON示例:
在这里输入代码
{
"menu": [
{
"1": "sql",
"2": "android",
"3": "mvc"
}
]
}
如果有人能分享代码来实现这一点,我们将不胜感激
谢谢你的帮助 下面是一个解决方案,它揭示了这个想法:
public class JacksonSerializer {
public static final String INPUT = "{\n" +
" \"menu\": [\n" +
" {\n" +
" \"1\": \"sql\",\n" +
" \"2\": \"android\",\n" +
" \"3\": \"mvc\"\n" +
" }\n" +
" ]\n" +
"}";
public static class MenuItems {
Map<String, String> menu = Maps.newHashMap();
}
public static class MenuItemsDeserializer extends JsonDeserializer<MenuItems> {
@Override
public MenuItems deserialize(org.codehaus.jackson.JsonParser jsonParser,
DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
final JsonNode elems = node.getElements().next().getElements().next();
final Map<String, String> map = Maps.newHashMap();
final Iterator<Map.Entry<String, JsonNode>> it = elems.getFields();
while (it.hasNext()) {
final Map.Entry<String, JsonNode> entry = it.next();
map.put(entry.getKey(), entry.getValue().asText());
}
final MenuItems menuItems = new MenuItems();
menuItems.menu = map;
return menuItems;
}
}
public static void main(final String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("SimpleModule",
new Version(1,0,0,null));
module.addDeserializer(MenuItems.class, new MenuItemsDeserializer());
mapper.registerModule(module);
MenuItems menuItems = mapper.readValue(INPUT, MenuItems.class);
}
}
公共类JacksonSerializer{
公共静态最终字符串输入=“{\n”+
“\“菜单\”:[\n”+
“{\n”+
“\“1\:\“sql\”,\n”+
“\“2\:\“android\”,\n”+
“\“3\:\“mvc\”\n”+
“}\n”+
“]\n”+
"}";
公共静态类菜单项{
映射菜单=Maps.newHashMap();
}
公共静态类MenuItemsDeserializer扩展了JsonDeserializer{
@凌驾
公共菜单项反序列化(org.codehaus.jackson.JsonParser-JsonParser,
反序列化上下文(反序列化上下文)
抛出IOException、JsonProcessingException{
JsonNode节点=jsonParser.getCodec().readTree(jsonParser);
final JsonNode elems=node.getElements().next().getElements().next();
final Map=Maps.newHashMap();
最终迭代器it=elems.getFields();
while(it.hasNext()){
final Map.Entry=it.next();
map.put(entry.getKey(),entry.getValue().asText());
}
final MenuItems MenuItems=新的MenuItems();
menuItems.menu=map;
返回菜单项;
}
}
公共静态void main(最终字符串[]args)引发IOException{
ObjectMapper mapper=新的ObjectMapper();
SimpleModule=新的SimpleModule(“SimpleModule”,
新版本(1,0,0,空);
module.addDeserializer(MenuItems.class,新的MenuItemsDeserializer());
映射器注册表模块(模块);
MenuItems MenuItems=mapper.readValue(输入,MenuItems.class);
}
}
如果数组中有两个元素怎么办?JSON数组不能转换为HashMap
。哦..是的!那么,在这篇文章中,我们是否必须使用数组列表?谢谢Stephen!这个主意真的很管用:)再次感谢你的帮助和感谢!嗨,斯蒂芬!如果两个数组来自json请求,这将如何工作?然后您必须迭代数组的元素并创建一个映射。