#json #jmeter #extractor
#json #jmeter #экстрактор
Вопрос:
Я столкнулся с проблемой с jsonpath для извлечения элемента из json.
Вот пример json:
[
{
"idA":"104",
"idB":"2941",
"idC":"13316",
"idE":"13361",
"idF":"12758",
"idG":"12865",
"idH":[
]
},
{
"idA":"104",
"idB":"2941",
"idC":"13317",
"idE":"13362",
"idF":"12759",
"idG":"12866",
"idH":[
"10391"
]
},
{
"idA":"104",
"idB":"2941",
"idC":"13318",
"idE":"13363",
"idF":"12760",
"idG":"12867",
"idH":[
]
}
]
Вот jsonpath:
$[?(@.idH[0]!=null)]
Цель состоит в том, чтобы получить элемент, в котором idH не равен null.
Он работает с несколькими онлайн-оценщиками json, от которых я получаю то, что ожидал:
[
{
"idA": "104",
"idB": "2941",
"idC": "13317",
"idE": "13362",
"idF": "12759",
"idG": "12866",
"idH": [
"10391"
]
}
]
Но оно также не работает на других нескольких онлайн-оценщиках, возвращая, например, «Произошла ошибка с JSONPath».
К сожалению, это не работает с Json extractor в Jmeter, потому что я получаю первый элемент json, например, если бы jsonpath был бы $[0]
Есть идеи, в чем здесь проблема? Заранее спасибо за любую помощь, подсказку или идею.
Для получения информации в случае, я использую Apache JMeter (5.3)
Ответ №1:
Как насчет использования JSON Extractor, который позволяет выполнять произвольные запросы JSONPath
Вы должны быть в состоянии получить искомый объект так просто, как:
$..[?(@.idH[0])]
ДЕМОНСТРАЦИЯ:
Дополнительная информация: тестирование API с помощью JMeter и JSON Extractor
Комментарии:
1. Большое спасибо за ваш ответ. Ну, на самом деле я уже использую Json Extractor в Jmeter, но все дело было в выражении Jsonpath. Потому что я пытался добавить в поисковую часть: @.idH[0]!=null, чтобы получить каждый элемент, где первый элемент массива idH не равен null. Я предполагаю, что в выражении Jsonpath вы не можете напрямую сформулировать отрицание, верно?