JsonPath: найти элемент в массиве по полю

У меня есть анонимный массив объектов, и я хотел бы найти объект по определенному полю.

Я пробовал это:

jsonPath.get("$.[?(@.name == 'David')]")

но я получаю следующую ошибку:

Invalid JSON expression:
Script1.groovy: 1: Unexpected input: '                         $.[' @ line 1, column 29.
                            $.[?(@.name == 'David')]
                               ^

1 error

Как мне это исправить?

JSON:

[
 {"name": "David"}, {"name": "Ron"}, {"name": "Dana"}
]

person yaseco    schedule 14.09.2020    source источник


Ответы (3)


Вопрос немного двусмысленный, но синтаксис неверный, Json path синтаксис использует Groovy's GPath нотацию

js.getString("find {it.name == 'David'}")
person Wilfred Clement    schedule 14.09.2020
comment
Не уверен, что понимаю синтаксис. Что такое it? - person yaseco; 14.09.2020
comment
Оператор it в Groovy аналогичен оператору @ в Jayway - person Wilfred Clement; 14.09.2020

Вам может понадобиться

$.[?(@.name == 'David')]

=>  $.data[?(@.name == 'David')]
    $.response[?(@.name == 'David')]
    $.body[?(@.name == 'David')]
    ...

Название зависит от того, когда вы извлекаете свой ответ

person Toàn Nguyễn Hải    schedule 14.09.2020
comment
Массив анонимный (посмотрите, пожалуйста, пример JSON) - person yaseco; 14.09.2020
comment
Только OP знает это, но это не должно быть анонимно, лол - person Toàn Nguyễn Hải; 14.09.2020

Поскольку вы используете json Array, используйте - $ [0], поскольку Дэвид находится в первом индексе.

person javaHolic    schedule 14.09.2020
comment
Это всего лишь пример. Размещение произвольное - person yaseco; 14.09.2020
comment
Согласен, очередь была неоднозначной. - person javaHolic; 14.09.2020