我在使用jsonpath匹配根元素的直接子节点时遇到问题。拥有这样的数据:
{"name": "lorem", "age": 15}
如何检查此json是否有字段" name"有价值" lorem"?我试过这样的事情:
$[?(@.name == "lorem")]
但它返回一个空数组,因为(我猜)它搜索一个字段" name"更深的结构。所以我试过了:
$[?(@ == "lorem")]
但它也不起作用(语法不正确)
但是 - 它的工作原理,当被查询的字段是"更深的"在json结构中。有了这个json数据:
{"name": {"realName": "lorem"}, "age": 15}
此查询按预期工作,返回非空结果:
$[?(@.realName == "lorem")]
似乎不可能对作为根元素的直接子元素的字段执行类似的查询。我是对的吗?
答案 0 :(得分:1)
指出您正在使用的语言和实现非常重要。 JSONPath是一个有用的开端,但非正式且未明确。
使用jsonpath-plus,你可以使用@
来检查root的值,但是如果你想确保你在正确的属性上,你还需要使用其自定义@property
值:
var json = {"name": "lorem", "age": 15};
var path = '$[?(@property == "name" && @ == "lorem")]';
JSONPath({json: json, path: path, wrap: false});