Что такое правильный формат get () для JsonPath для выбора значения поля в массиве объектов JSON? - PullRequest
0 голосов
/ 25 февраля 2019

Я пользуюсь уверенностью, чтобы сделать пост-вызов API и получить ответ обратно в теле.Затем мне нужно взять этот ответ и выбрать конкретные значения полей и сохранить их в виде строк, чтобы потом сравнить их с другими строковыми объектами.Я написал jsonpath просто отлично, чтобы получить значения полей верхнего уровня (например, id, статус, тип, страну и т. Д.), Но когда мне нужно попасть внутрь одного из возвращаемых объектов в массиве json, я не могу правильно получить формат дляметод get ().

Вот пример возвращаемого Json:

{
  "id": "ABC123",
  "status": "NEW",
  "type": "PERSONAL",
  "country": "United States",
  "totalBalances": {},
  "availableBalances": {},
  "fields": [
    {
      "fieldType": "mobilephone",
      "value": "14216904425",
      "fieldId": "personalMobileNumber"
    },
    {
      "fieldType": "email",
      "value": "user12345@work.com",
      "fieldId": "personalEmail"
    },
    {
      "fieldType": "STRING",
      "value": "John Doe",
      "fieldId": "individualName"
    }
  ]
}

Вот путь json, который я пытался отформатировать, чтобы он соответствовал get ()метод, но я получаю исключение Illegal Argument каждый раз (java.lang.IllegalArgumentException: неверное выражение JSON), я пытаюсь заставить его работать.В основном мне нужно определить правильный объект в массиве и получить правильное значение поля.В этом случае это поле fieldId, и я хочу, чтобы значение поля «значение» (Джон Доу) было таким, чтобы я мог сохранить его в объект String:

JsonPath pathToAccountName = response.jsonPath();
String accountName = pathToAccountName.get("fields[?(@.fieldId=='individualName')].value")

Я использовал https://jsonpath.curiousconcept.com/ дляполучение VALID JSON-пути:

$.fields[?(@.fieldId=='individualName')].value

Но я попробовал все, чтобы преобразовать его во что-то, что примет метод get (), но безуспешно.Обыскать все посты здесь и остальные технические документы тоже не помогли.

1 Ответ

0 голосов
/ 25 февраля 2019

Будьте уверены, использует Gpath Groovy.Таким образом, ваш запрос может выглядеть следующим образом:

JsonPath pathToAccountName = response.jsonPath();
String value = jsonPath.getString("fields.find { it.fieldId == 'individualName' }.value");

Здесь вы можете найти несколько примеров (это касается обработки XML, но также применимо к JSON): http://groovy -lang.org / processing-xml.html

...