Как распечатать значение, сравнив два поля внутри JSON – RestAssured

Рассмотрим следующий набор данных:

[
    {
        "_id": 1234,
        "bagnumber": "A",
        "bagtype": "coin"
    },
    {
        "_id": 2345,
        "bagnumber": "B",
        "bagtype": "cash"
    },
    {
        "_id": 3456,
        "bagnumber": "C",
        "bagtype": "coin"
    },
    {
        "_id": 5678,
        "bagnumber": "D",
        "bagtype": "cash"
    }
]

Мне нужно извлечь и распечатать номера сумок, которые имеют исключительно тип сумки «наличные». Таким образом, желаемый результат должен быть:

Bag numbers are: B, D

Сначала я попытался извлечь номера сумок, используя список:

List<String> bagNumbers = response.jsonPath().getList("bagnumber");

Впоследствии я попытался получить типы сумок, используя тот же список, и попытался сравнить два списка. Однако мои попытки не увенчались успехом, что, возможно, указывает на слишком сложный подход.

Может ли кто-нибудь любезно предложить более эффективное решение? Возможно, будет полезно использовать класс Matchers или любой другой подходящий подход.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

ГСОН

Я предлагаю Gson или Jackson для процесса Json.

Если входные данные являются строкой, преобразуйте их в JsonArray, используя:

JsonArray jsonData = new Gson().fromJson(jsonString, JsonArray.class);

Создайте список, содержащий результат:

List<String> listBadCashNumber =new ArrayList<>();

Начните перебирать массив:

for(int i = 0;i<jsonData.size();i++){
    JsonObject bag = jsonData.get(i).getAsJsonObject();// Because each element off array is a object
    if (bag.get("bagtype").getAsString().equals("cash")){ // Compare the field 'bagtype', you should handle the null if needed
        listBadCashNumber.add(bag.get("bagnumber").getAsString()); // Add to result list
    }
}
System.out.println("Bag numbers are: "+listBadCashNumber);

И результат:

Bag numbers are: [B, D]

ввод представляет собой метод get. Вывод, который я получаю, - это массив json, например "[ {}, {}, {}]", как преобразовать их в объект JsonArray?, и когда я пытаюсь, ".fromJson" - он выдает ошибку при использовании "tojson"

user2024 26.03.2024 23:25

@user2024 user2024 Что такое «метод get» в этом контексте? допустимым вводом .fromJson является Reader или String. Вам следует преобразовать ввод в строку.

cuong02n 27.03.2024 02:13

в RestAssured я использовал метод GET из URL-адреса, который вернул ответ в формате Json Array, т.е. «Response = [ {}, {}, {}]» (например, набор данных, который я дал выше) - поэтому, получая ответ, я должен получить их как [B,D]

user2024 27.03.2024 22:25

«Response = [ {}, {}, {} ]» не является форматом Json, я думаю, вы упоминаете Response = «[ {}, {}, {} ]», поэтому вы должны преобразовать его в строку с помощью его метода , например .toString() или .getBody() или .getResponseBody(), .getBody().entity(), ..... затем вы преобразуете его с помощью Gson.

cuong02n 28.03.2024 03:25

Я действительно сделал эти шаги вчера и смог добиться успеха в числах сумок. 1. Преобразовал ответ в строку, используя String stringresponse = response.asString(); 2. Затем преобразовали их в JsonArray, используя JsonArray jsonData = new Gson().fromJson(stringresponse, JsonArray.class); тогда ваши предложения - смогу получить :) Спасибо!

user2024 28.03.2024 21:05

@user2024 user2024 приятно это слышать.

cuong02n 29.03.2024 03:05

можешь ли ты сделать это решенным

cuong02n 29.03.2024 03:06

Вы можете попробовать JSON-библиотеку Josson, и ваш запрос может быть выполнен с помощью коротких операторов и функций.

https://github.com/octomix/josson

Josson josson = Josson.fromJsonString(
    "[" +
    "    {" +
    "        \"_id\": 1234," +
    "        \"bagnumber\": \"A\"," +
    "        \"bagtype\": \"coin\"" +
    "    }," +
    "    {" +
    "        \"_id\": 2345," +
    "        \"bagnumber\": \"B\"," +
    "        \"bagtype\": \"cash\"" +
    "    }," +
    "    {" +
    "        \"_id\": 3456," +
    "        \"bagnumber\": \"C\"," +
    "        \"bagtype\": \"coin\"" +
    "    }," +
    "    {" +
    "        \"_id\": 5678," +
    "        \"bagnumber\": \"D\"," +
    "        \"bagtype\": \"cash\"" +
    "    }" +
    "]");
String output = josson.getString("[bagtype='cash']*.bagnumber.join(', ').prepend('Bag numbers are: ')");
System.out.println(output); // "Bag numbers are: B, D"

Другие вопросы по теме