Будьте уверены и Java: как получить нужный объект / тело JSON? - PullRequest
0 голосов
/ 03 июля 2018

Предположим, у меня есть запрос GET, который возвращает что-то вроде следующего:

 [
  {
    "id": 1,
    "name": "Mark"
  },
  {
    "id": 2,
    "name": "Steve"
  },
  {
    "id": 3,
    "name": "Bill"
  }
]

Как я могу вернуть нужный объект из списка? или что-то, что, возможно, содержит этот JSON в виде строки, или каков правильный подход для получения только одного элемента из ответа, например, скажем, мне нужно только получить информацию о счетах, поэтому я хочу проанализировать этот JSON, чтобы получить только это:

  {
    "id": 3,
    "name": "Bill"
  }

И нет, я не хочу делать этот анализ в URL запроса GET. Мне нужно иметь возможность получить его из списка всего, что возвращает запрос GET.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Я сделал другое решение, которое действительно подходит именно для моих нужд. Я десериализовал ответ JSON в список классов POJO, которым тело JSON соответствует так:

List<MyEntity> myList = new ArrayList<>();

    myList = given().
            contentType(ContentType.JSON).
    when().
            get(getURL).
    then().
            extract().
            body().
            jsonPath().
            getList(".", MyEntity.class);

Таким образом, я получаю список инициализированных классов MyEntity и могу просто делать все, что мне нужно, например, я просто изменяю значения следующим образом:

myList.get(0).setName("newName");

Тогда я могу просто отправить их обратно с помощью вызовов POST / PUT или что-то в этом роде. Работает как шарм!

0 голосов
/ 03 июля 2018
"$[2]"

В JsonPath $ представляет анонимный корень запрашиваемого JSON, для случаев, подобных этому, когда вам нужно обратиться к нему напрямую, а не к вещам типа "stuff.things[8]"

В этом случае массив, который вы пытаетесь проанализировать, является анонимным корнем, поэтому вы называете его $. Затем вы хотите элемент с индексом 2 этого массива, так что это $[2]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...