是否存在与XPath双斜杠(//)“任意后代”搜索等效的JMESPath语法?
JMESPath 实现 XPath 任意后代元素搜索的等效语法
在XPath中,要搜索任意层级下匹配特定路径的后代元素,比如查找所有包含子元素b的a元素,可用查询语句//a/b。
举个XML文档的例子:
<foo> <bar> <a><b>first</b></a> </bar> <a><b>second</b></a> </foo>
使用//a/b可以找到<b>first</b>和<b>second</b>这两个元素。
那在JSON和JMESPath中,有没有对应的等效语法?比如针对下面这个JSON文档:
{ "foo": { "bar": { "a": {"b": "first"} }, "a": {"b": "second"} } }
要获取{"b": "first"}和{"b": "second"}这两个结果,该怎么写JMESPath语句?
答案是肯定的,JMESPath里的递归下降运算符..就能实现类似XPath中//的任意层级搜索效果。
针对上述JSON文档,对应的JMESPath查询语句为:
..a
执行这个语句后,就能直接得到目标结果:
[ { "b": "first" }, { "b": "second" } ]
如果要进一步精准获取b字段的值,还可以写成:
..a.b
结果会是:
[ "first", "second" ]
内容的提问来源于stack exchange,提问作者PiFace
相关产品推荐
相关产品推荐

