【问题标题】:How to convert json array to java hashmap using jackson如何使用jackson将json数组转换为java hashmap
【发布时间】:2015-03-15 21:06:59
【问题描述】:

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

需要这样的输出:

key  Value 
1    sql
2    android
3    mvc

JSON 示例: 在此输入代码

{
    "menu": [
        {
            "1": "sql",
            "2": "android",
            "3": "mvc"
        }
    ]
}

如果有人可以分享代码来实现这一点,我们将不胜感激。

感谢您的帮助!

【问题讨论】:

  • 如果数组中有两个元素怎么办? JSON 数组不能转换为 HashMap
  • 哦..是的!所以在这个我们必须去数组列表吗?

标签: java json dictionary hashmap jackson


【解决方案1】:

这是一个揭示这个想法的解决方案:

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);

    }
}

【讨论】:

  • 谢谢斯蒂芬!这个想法真的很管用 :) 感谢您的帮助,再次感谢!
  • 嗨斯蒂芬!如果两个数组来自 json 请求,这将如何工作?
  • 然后你必须遍历你的数组元素并创建一个地图。
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多