首页 > 解决方案 > Java - 通过 json 迭代获取值

问题描述

我在这里尝试做的是在从 API 调用获得的 Json 对象中进行迭代,以便搜索与键相关的值。但是,我无法从每次迭代中获取元组。从以下代码:

public void findResponseValue(String param, String inputValue){

    ArrayList<String> jsonArray = response.getBody().jsonPath().get("");
    Iterator<String> iterator = jsonArray.iterator();

    while(iterator.hasNext()){
        System.out.println(iterator.next());
        iterator.next();

    }

我收到以下错误

java.lang.ClassCastException:类 java.util.HashMap 不能转换为类 java.lang.String(java.util.HashMap 和 java.lang.String 在加载器“bootstrap”的模块 java.base 中)

它正确地迭代了arrayList,但尝试从中获取值失败。


响应正文示例

[
{
    "creationDate": "2017-05-29T07:45:43Z",
    "createdBy": "YYY.YYY",
    "lastUpdate": "2018-09-26T10:10:12Z",
    "updatedBy": "XXX.XXX",
    "id": 22,
    "partner": "ALS",
    "countries": [

    ],
    "countriesCodes": "NL",
    "salesChannels": [
        {
            "code": "Integrated"
        }
    ],
    "touchPoints": [

    ],
    "serviceEntity": "AWPNL",
    "flag": false,
    "activated": true,
    "type": "dcx"
},
{
    "creationDate": "2017-06-01T13:22:29Z",
    "createdBy": "YYY.YYY",
    "lastUpdate": "2017-11-30T12:24:36Z",
    "updatedBy": "MMM.T.NNN",
    "id": 39,
    "partner": "ALS",
    "countries": [

    ],
    "countriesCodes": "ES",
    "salesChannels": [
        {
            "code": "Integrated"
        }
    ],
    "touchPoints": [

    ],
    "serviceEntity": "AWPES",
    "flag": false,
    "activated": true,
    "type": "dcx"
}
]

标签: javaarraysjsonhttpresponse

解决方案


您的响应正文应如下所示:

{"data":[
{
    "creationDate": "2017-05-29T07:45:43Z",
    "createdBy": "YYY.YYY",
    "lastUpdate": "2018-09-26T10:10:12Z",
    "updatedBy": "XXX.XXX",
    "id": 22,
    "partner": "ALS",
    "countries": [

    ],
    "countriesCodes": "NL",
    "salesChannels": [
        {
            "code": "Integrated"
        }
    ],
    "touchPoints": [

    ],
    "serviceEntity": "AWPNL",
    "flag": false,
    "activated": true,
    "type": "dcx"
},
{
    "creationDate": "2017-06-01T13:22:29Z",
    "createdBy": "YYY.YYY",
    "lastUpdate": "2017-11-30T12:24:36Z",
    "updatedBy": "MMM.T.NNN",
    "id": 39,
    "partner": "ALS",
    "countries": [

    ],
    "countriesCodes": "ES",
    "salesChannels": [
        {
            "code": "Integrated"
        }
    ],
    "touchPoints": [

    ],
    "serviceEntity": "AWPES",
    "flag": false,
    "activated": true,
    "type": "dcx"
}
]}

这是我使用的一种方法(使用了 Gson 解析器 API)。在 for 循环中,您可以比较您的键或值。

    public static void findResponseValue(String param, String inputValue){

         JsonObject jsonObject = new JsonParser().parse(jsonResponseBody).getAsJsonObject();
         JsonElement jsonElement = jsonObject.get("data");
         JsonArray jsonArray = jsonElement.getAsJsonArray();

         for (int i = 0; i < jsonArray.size(); i++) {
            System.out.println(i+". Array element Content:"+jsonArray.get(i));

            JsonObject jsonObj = jsonArray.get(i).getAsJsonObject();

            System.out.println("\t creationDate:"+jsonObj.get("creationDate")+" partner:"+jsonObj.get("partner"));

         }       
    }

推荐阅读