Что такое правильный формат get () для JsonPath для выбора значения поля в массиве объектов JSON?
Я использую уверенность, чтобы сделать пост-вызов 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, и я хочу, чтобы значение "value" поля (Джон Доу), чтобы я мог сохранить его в объект String:
JsonPath pathToAccountName = response.jsonPath();
String accountName = pathToAccountName.get("fields[?(@.fieldId=='individualName')].value")
Я использовал https://jsonpath.curiousconcept.com/ для получения VALID JSON-пути:
$.fields[?(@.fieldId=='individualName')].value
Но я перепробовал все, чтобы превратить его во что-то, что примет метод get(), но безуспешно Обыскать все посты здесь и остальные технические документы тоже не помогли.
2 ответа
Будьте уверены, использует 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
Мне нужно знать, как получить этот вывод -
JSON ДОКУМЕНТАЦИЯ -
{ "status": "E000", "customerId": "VjAxI2VhNzg5ZmJlLWIyNjAtNGZlOS1iZDNkLTdjMmU1MjA2ZmVhZA", "merchantId": "1", "cards": [ { "cardType": "DEBIT", "cardIssuer": "AXIS", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "CREDIT", "cardIssuer": "ICICI Bank", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "CREDIT", "cardIssuer": "HDFC Bank", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "CREDIT", "cardIssuer": "ICICI Bank", "cardBrand": "VISA", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "DEBIT", "cardIssuer": "Punjab National Bank", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "CREDIT", "cardIssuer": "ICICI Bank", "cardBrand": "MASTERCARD", "nickName": null, "expired": null, "cardMigrationStatus": "DONE", "tur": null, "category": null } ], "status_mssg": null }
Я хочу этот вывод -
[ { "cardType": "DEBIT", "cardIssuer": "AXIS", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "CREDIT", "cardIssuer": "ICICI Bank", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "CREDIT", "cardIssuer": "HDFC Bank", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null }, { "cardType": "DEBIT", "cardIssuer": "Punjab National Bank", "cardBrand": "MASTERCARD", "nickName": "", "expired": "false", "cardMigrationStatus": "OPEN", "tur": null, "category": null } ]
Я использую это - jsonPathValidator.getString("$.cards[?(@.cardMigrationStatus == 'OPEN' && @.cardBrand == 'MASTERCARD')]");
но не получая результат.