简体   繁体   中英

Java - How to iterate over a list of hashmap?

I have a following response from a HTTP call which looks like this...

[{"id": 1, "name" : abc, "above50" :  true} , {"id": 2, "name" : "xyc", "above50" :  false, "kids" : "yes"} ]

I need to iterate through this list and find if there is a key called kids and if there is the key kids, i need to store the value. How do i do it in java?

First you need to parse the json string - it's a list of objects. If you don't have classes to match those objects, by default they can be represented as Map<String, Object> . Then you need to iterate the list, and for every object in it, you have to iterate the entries in the object. If the key matches, store it.

        //parse json string with whatever parser you like
        List<Map<String, Object>> list = ...;
        //iterate every object in the list
        for (Map<String, Object> map : list) {
            //iterate every entry in the object
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                if (entry.getKey().equals("kids")) {
                    //you can store the key and the value however you want/need
                    System.out.println(entry.getKey() + " -> " + entry.getValue());
                }
            }
        }
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-------------------------------------------

    @Test
    public void test04() throws IOException {
        final String preString = "[{\"id\": 1, \"name\" : \"abc\", \"above50\" :  true} , {\"id\": 2, \"name\" : \"xyc\", \"above50\" :  false, \"kids\" : \"yes\"} ]";
        final ObjectMapper objectMapper = new ObjectMapper();
        final JsonNode arrayNode = objectMapper.readTree(preString);
        if (arrayNode.isArray()) {
            for (JsonNode it : arrayNode) {
                final JsonNode kids = it.get("kids");
                if (kids != null) {
                    //TODO: Storage this value by you want
                    System.out.println(kids.asText());
                }
            }
        }
    }
 

You can use JSONObject or JSONArray

String message = ""list" : [{"id": 1, "name" : abc, "above50" :  true} , {"id": 2, "name" : "xyc", "above50" :  false, "kids" : "yes"} ]";
JSONObject jsonObject = new JSONObject(message);
JSONArray array = jsonObject.getJsonArray("list");
//so now inside the jsonArray there is 2 jsonObject
//then you can parse the jsonArray and check if there is 
//a jsonObject that have "kids" like jsonObject.get("kids") != null
// or jsonObject.getString("kids") != null

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM