2016-04-25 4 views
0

У меня проблема с сопоставлением прямых дочерних элементов корневого элемента с использованием jsonpath. Имея такую ​​информацию:Запрос прямых дочерних элементов корневого элемента с jsonpath

{"name": "lorem", "age": 15} 

Как я могу проверить, если это имеет JSON поле «имя» со значением «Lorem» ?. Я пытался что-то вроде этого:

$[?(@.name == "lorem")] 

но он возвращает пустой массив, потому что (я думаю) это искать поле «имя» глубже в структуре. Так что я пробовал:

$[?(@ == "lorem")] 

Но он не работает также (неправильный синтаксис)

Однако - это работает, когда запрашивается поле «глубже» в структуре JSon. С этой JSon данные:

{"name": {"realName": "lorem"}, "age": 15} 

этот запрос работает, как ожидалось, возвратившись непустой результат:

$[?(@.realName == "lorem")] 

Похоже, что нет никакой возможности выполнить подобный запрос для полей, которые являются прямыми потомками корня элемент. Я прав?

ответ

1

Важно указать, какой язык и реализация вы используете. JSONPath было полезным началом, но неофициальным и неопределенным.

Используя jsonpath-plus, вы можете использовать @ проверить значение в корне, но если вы хотите, чтобы убедиться, что вы на правильном собственности, вы также должны использовать его пользовательские @property значение:

var json = {"name": "lorem", "age": 15}; 
var path = '$[?(@property == "name" && @ == "lorem")]'; 
JSONPath({json: json, path: path, wrap: false}); 

https://jsfiddle.net/vq1dm792/