Java - получить значения за итерацию json - PullRequest
0 голосов
/ 22 марта 2019

Здесь я пытаюсь выполнить итерацию внутри объекта Json, полученного из вызова API, для поиска значения, связанного с ключом.Однако мне не удается получить кортежи из каждой итерации.Из следующего кода:

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 находятся в модуле java.base загрузчика 'bootstrap')

Он правильно перебирает массив 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 Ответ

0 голосов
/ 25 марта 2019

Ваше тело ответа должно быть таким, как показано ниже:

{"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"
}
]}

Я использовал этот метод (использовался API синтаксического анализатора Gson). В течение цикла вы можете сравнить ваш ключ или значение.

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

         }       
    }
...