简体   繁体   English

迭代列表 <HashMap<String, String> &gt;使用Java的值

[英]iterate a List<HashMap<String, String>> values using java

I have a json response like this 我有一个像这样的json响应

{
  "queryPath": "/api/",
  "nId": "f084f5ad24fcfaa9e9faea0",
  "statusCode": 707
  "statusMessage": "Success",
  "results": {
    "data": [
      {
        "id": "10248522500798",
        "capabilities": [
          "men",
          "women"
        ],
        "name": "errt2"
      },
      {
        "id": "418143778",
        "capabilities": [
          "dog",
          "cat"
        ],
        "name": "Livin"
      }
    ]
  }
}

Here am adding results.data to a list as follows 这里是将results.data添加到列表,如下所示

  private List<HashMap<String, String>> episodes = new ArrayList<HashMap<String, String>>();
  episodes =helper.getJSONValue(response, "results.data"); 



   public <T>T getJSONValue(Response res, String path ){
        String json = res.asString();
        JsonPath jpath = new JsonPath(json);
        return jpath.get(path);
    }

so episodes contains all data i mean all results.data While i debuging am getting this way 因此剧集包含所有数据,我指的是所有result.data。

 [{id=10248522500798, name=errt2, capabilities=[men, women]}, {id=418143778, name=Livin, capabilities=[dog, cat]}]

Here i have capabilities [men, women] and [dog, cat] .i need to check capability contains men or dog. 在这里,我具有[men, women][dog, cat]能力。我需要检查是否包含mendog.能力dog. How can i do that? 我怎样才能做到这一点?

If i were you i haven't done this.. Use gson and map your json into a java model. 如果我是你,我还没有做到这一点。使用gson并将json映射到Java模型中。 It's way better. 更好。 Afterwards you can access all your model parts with getters and setters. 之后,您可以使用getter和setter访问所有模型零件。

 MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2

As you see it's very simple :) 如您所见,这非常简单:)

But if you want to iterate a list that contains a map you can use code block below: 但是,如果要迭代包含地图的列表,则可以使用以下代码块:

List<Map<String, String>> test = new ArrayList<Map<String, String>>();
        for( Map<String, String> map : test ){
            for( Entry<String, String> entry : map.entrySet() ){
                System.out.println( entry.getKey() + " : " + entry.getValue() );
            }
        }

With the code above you can get all the entry's keys and values and check them. 使用上面的代码,您可以获得所有条目的键和值并进行检查。

Edit: 编辑:

You have to change your List to List<Map<String,Object>> after that: 之后,您必须将List更改为List<Map<String,Object>>

 List<Map<String, Object>> test = new ArrayList<Map<String, Object>>();
        for( Map<String, Object> map : test ){
            for( Entry<String, Object> entry : map.entrySet() ){
                if( entry.getKey().equalsIgnoreCase( "capabilities" ) ){
                    List<String> myCapabilities = ( List )entry.getValue();
                    if( myCapabilities.contains( "dog" ) && myCapabilities.contains( "cat" ) ){
                        // BLA BLA
                    }
                }
            }
        }

It's a nasty way.. I recommend you to use gson.. 这是一种令人讨厌的方式..我建议您使用gson ..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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