Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jackson将json数组转换为java hashmap_Java_Json_Dictionary_Hashmap_Jackson - Fatal编程技术网

如何使用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" } ] } 如果有人能分享代码来实现这一点,

我想使用jackson将下面的json数组转换为java hashmap,并迭代如下值:

需要这样的输出:

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请求,这将如何工作?然后您必须迭代数组的元素并创建一个映射。