【问题标题】:How to get response in a hashmap如何在哈希图中获得响应
【发布时间】:2018-07-14 11:09:35
【问题描述】:

这是对特定查询的响应。所以我需要获取每个值来检查值。但是我很困惑在 hashmap 中获取每个值。对于每个值,比如好,坏人数增加。那么我怎样才能在哈希图中得到它。

{
"Great": [
    {
        "name": "angitha",
        "number": "2",
        "value": "nice"
    },
    {
        "name": "shiva",
        "number": "53",
        "value": "it"
    }
],
"Okay": [
    {
        "name": "anita",
        "number": "2",
        "value": "nice"
    },
    {
        "name": "hansika",
        "number": "21",
        "value": "nice"
    },
    {
        "name": "angitha",
        "number": "24",
        "value": "wow"
],
"Bad": [
    {
        "name": "varun",
        "number": "266",
        "value": "niceee"
    }

]

}

我试过这个。反馈大小变成了三个(很好,好的,坏...)。但是值没有得到......得到空值。而且我是 java hashmap 的新手。

public void comments() throws Exception {
    Map feedback = value.getBody().jsonPath().get();
    for (int i = 0; i < feedback.size(); i++) {
        List comments = (List) feedback.get(i);
        for (int j = 0;  j< comments.size(); i++) {
            Map commentseaching = (Map) comments.get(i);
            Assert.assertTrue(!commentseaching.get("name").toString().isEmpty());
            Assert.assertEquals(commentseach.get("value").toString());
            Assert.assertTrue(!commentseaching.get("number").toString().isEmpty());
        }

    }
}

我的代码

这段代码运行得很好。但是这里我取的是基于 get("great") 这样的值。有没有其他方法可以减少重复。

 public void comments() throws Exception{
    Map feedback = value.getBody().jsonPath().get();
    List comments = (List) feedbackComments.get("Great");
    for(int i=0; i<comments.size();i++){
        Map commentseaching = (Map) comments.get(i);
        Assert.assertTrue(!commentseaching.get("name").toString().isEmpty());
        Assert.assertEquals(commentseaching.get("value").toString());
        Assert.assertTrue(!commentseaching.get("number").toString().isEmpty());
    }
    comments=(List) feedbackComments.get("Okay");
    for(int i=0; i<comments.size();i++){
        Map commentseaching = (Map) comments.get(i);
        Assert.assertTrue(!commentseaching.get("name").toString().isEmpty());
        Assert.assertEquals(commentseaching.get("value").toString());
        Assert.assertTrue(!commentseaching.get("number").toString().isEmpty());
    }
    comments=(List) feedbackComments.get("Bad");
    for(int i=0; i<comments.size();i++){
        Map commentseaching = (Map) comments.get(i);
        Assert.assertTrue(!commentseaching.get("name").toString().isEmpty());
        Assert.assertEquals(commentseaching.get("value").toString());
        Assert.assertTrue(!commentseaching.get("number").toString().isEmpty());
    }

}

【问题讨论】:

  • 第28行的json数据有问题,必须是} ], "Bad":
  • 老实说,我建议不要将这些放在 HashMap 中,而是放在 POJO 中。

标签: java api for-loop hashmap


【解决方案1】:

另一种方法是使用 Gson 库来轻松实现您的 JSON 对象

第 1 步:您必须为每个 Root 属性创建模型,例如 BAD、Great 和 Ok

例如:

public class Great{
private String name;
private int number;
private String value;
}

第 2 步:您需要创建该模型的一些 arrayList,例如

ArrayList<Great>greatList=new ArrayList()
ArrayList<Bad>badList=new ArrayList()
ArrayList<Ok>okList=new ArrayList()

第 3 步: 像这样将 json 编码为 Java 对象

greatList = gson.fromJson((myJsonResponse.getJSONArray("great")).toString(), new TypeToken<List<Great>>(){}.getType());
okList = gson.fromJson((myJsonResponse.getJSONArray("ok")).toString(), new TypeToken<List<Ok>>(){}.getType());
badList = gson.fromJson((myJsonResponse.getJSONArray("bad")).toString(), new TypeToken<List<Bad>>(){}.getType());

这将生成 3 个映射的 java 对象的 ArrayList,您现在可以将它们用作 java 对象

但是,您的所有 json 属性都有相同的语法,所以我更愿意将同一个类用于发布 例如:

 public class GeneralClass{
    private String name;
    private int number;
    private String value;
    }

然后将 te json 对象序列化为 GeneralClass 的 arrayList,仅更改列表的名称,例如:

ArrayList<GeneralClass>badList =new ArrayList();
ArrayList<GeneralClass>okList =new ArrayList();
ArrayList<GeneralClass>greatList =new ArrayList();

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2010-12-19
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多