使用jsonpath查询根元素的直接子元素

时间:2016-04-25 14:37:09

标签: json jsonpath

我在使用jsonpath匹配根元素的直接子节点时遇到问题。拥有这样的数据:

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

如何检查此json是否有字段" name"有价值" lorem"?我试过这样的事情:

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

但它返回一个空数组,因为(我猜)它搜索一个字段" name"更深的结构。所以我试过了:

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

但它也不起作用(语法不正确)

但是 - 它的工作原理,当被查询的字段是"更深的"在json结构中。有了这个json数据:

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

此查询按预期工作,返回非空结果:

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

似乎不可能对作为根元素的直接子元素的字段执行类似的查询。我是对的吗?

1 个答案:

答案 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});

https://jsfiddle.net/vq1dm792/