Java — Получение значений с помощью итерации json

#java #arrays #json #httpresponse

#java #массивы #json #httpresponse

Вопрос:

То, что я пытаюсь здесь сделать, это выполнить итерацию внутри объекта 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.Строка (java.util.HashMap и java.lang.Строка находится в модуле 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. Что ж, ошибка кажется мне очевидной, ваш список состоит из объектов HashMap, а не из строковых объектов.

2. Можете ли вы привести пример тела ответа?

3. @StephanHogenboom Я добавил тело ответа, спасибо

4. Привет @JoakimDanielson, я уже пытался объявить эту HashMap<Строка, Список<Строка>> jsonHashMap = new HashMap<Строка, Список<строка>>(); … jsonHashMap = iterator.next(); Ошибка:(322, 40) java: несовместимые типы: java.lang. Строка не может быть преобразована в java.util. HashMap<java.lang. Строка,java.util.List<java.lang. Строка>>

Ответ №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 parser 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"));

         }       
    }