在XPath中,可以采用以下方法:
XML:
<root>
<parent>
<child>
<descendant status="passed">1</descendant>
<descendant status="passed">2</descendant>
</child>
</parent>
<parent>
<child>
<descendant status="passed">3</descendant>
<descendant status="failed">4</descendant>
</child>
</parent>
</root>
XPath: //parent[.//*[@status='failed']]
结果: /root/parent[2]
(即获取任何后代状态为“失败”的任何父节点)
使用Google's JSONPath implementation,以下内容不起作用:
JSON:
{
parents: [{
children: [{
descendants: [{
name: 1,
status: "passed"
}, {
name: 2,
status: "passed"
}
]
}
]
}, {
children: [{
descendants: [{
name: 3,
status: "passed"
}, {
name: 4,
status: "failed"
}
]
}
]
}
]
}
JSONPath: $.parent[?(@..status=='failed')]
结果: Uncaught SyntaxError: jsonPath: Unexpected token .: _v..status=='failed'
实际上,谓词中出现..
或*
会导致类似的错误。 e.g。
$.parent[?(@..status)]
会导致Unexpected token .: _v..status
和$.parent[?(@.*)]
导致Unexpected token *: _v.*
我也试过dchester/jsonpath's implementation并遇到同样的问题,所以我不确定JSONPath是否支持这种行为。我甚至不确定是谁定义了JSONPath的规范。
问题: JSONPath可以实现吗? (即获取parents
中包含status == "failed"
的任何后代但未明确写出路径的元素数组)