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