1

I want to convert below json array to java hashmap using jackson and iterate the values like below:

Need output like this:

key  Value 
1    sql
2    android
3    mvc

JSON Sample: enter code here

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

It would be really appreciated if someone can share the code to achieve this.

Thanks for your help!

2
  • 2
    What if there are two elements in the array? A JSON array is not convertible to a HashMap. Commented Mar 15, 2015 at 21:13
  • oh..yes! So in this do we have to go for Array list? Commented Mar 15, 2015 at 23:35

1 Answer 1

2

Here is a solution that reveals the idea:

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

    }
}
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks Stephen! This idea really works :) Appreciated your help and thanks again!
Hi Stephen! How this will work if two array comes from json request?
Then you have to iterate over elements of your array and create a map.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.