2016-12-02 8 views
2

Интересно, можно ли фильтровать сложные объекты-объекты дочернего уровня (не простая строка) и извлекать те родительские узлы, чьи дети соответствуют прогнозам.Поддерживает ли фильтр поддержки Jayway на уровне детей, возвращает родительский узел?

Возьмите пример книжного магазина из проекта github от Jayway: https://github.com/jayway/JsonPath#path-examples.

Если бы я изменил «автора» к более сложному объекту, как следующее:

"authors": [ 
    { 
     "firstName": "Nigel", 
     "lastName": "Rees" 
    }, 
    { 
     "firstName": "Evelyn", 
     "lastName": "Waugh" 
    } 
    ] 

с тем, что, как я могу получить обратно «все книги, которые были написаны кем-то с фамилией«Уо '' ?

Я пытался играть с Json оценщиком (http://jsonpath.herokuapp.com/) использовать что-то вроде $.store.book[?(@.authors[?(@.lastName == 'Waugh')])] , но кажется, что фильтр не работает. Я предполагаю, что Jayway не допускает вложенных предикатов. Если это так, будет ли это обходным путем?

Также, если есть какая-либо другая реализация Java JsonPath, которая может прийти на помощь, мне бы очень хотелось ее изучить.

Заранее спасибо.

ответ

2

Похоже, что этого не может быть достигнуто без предоставления значения индекса для родительского массива (т. Е. Авторов). Я знаю, что это может не полностью решить проблему. Я просто подумал о подтверждении ограничения, когда внутри массива есть массив.

$.store.book[?(@.authors[0].lastName == 'Waugh')] 
+0

Благодарим за внимание. Да, я закончил свой путь с помощью цикла, чтобы получить нужные мне внешние узлы. То же, что и вы, я задаюсь вопросом, является ли это ограничением Jayway JsonPath. –

+0

Хорошо. Пожалуйста, примите ответ, если это было полезно. – notionquest