java - 使用 java 迭代 List<HashMap<String, String>> 值

标签 java

我有一个像这样的 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"
      }
    ]
  }
}

这里将 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);
    }

所以剧集包含所有数据,我的意思是所有结果。数据 当我调试时我会这样

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

这里我有能力[男人,女人][狗,猫]。我需要检查能力包含男人狗。 我怎样才能做到这一点?

最佳答案

如果我是你,我就不会这样做.. 使用gson并将您的 json 映射到 java 模型中。好多了。之后,您可以使用 getter 和 setter 访问所有模型部件。

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

如您所见,这非常简单:)

但是如果您想迭代包含 map 的列表,您可以使用下面的代码块:

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

通过上面的代码,您可以获取所有条目的键和值并检查它们。

编辑:

您必须将列表更改为 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
                    }
                }
            }
        }

这是一种令人讨厌的方式..我建议你使用gson..

关于java - 使用 java 迭代 List<HashMap<String, String>> 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165274/

相关文章:

java - 接口(interface)中方法的通用返回类型

java - 在 Java 中选择随机卡

java - Guice 服务依赖关系

java - 在android注销后防止后退按钮

java - 如何制作一个具有多个文本字段的输入对话框(即可以接受很多输入)

java - 嵌套表单数据与 Spring MVC 中的对象列表绑定(bind)

java - 将 jtable 选择的 "ctrl + space"行为分配给另一个键

java - 如何比较 Java 中的路径等价性?

java - JAVA 中带有 ResultSet 参数的 SELECT 查询

java - 使用 Hibernate 合并和检索子级