提问者:小点点

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.HhashMap和java.lang.Sstring位于加载程序'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"
}
]

共1个答案

匿名用户

您的回复正文应如下所示:

{"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"));

         }       
    }