我可以在JQ中使用相对路径或通配符吗?

时间:2014-09-11 06:44:02

标签: jq json-path-expression

是否可以在JQ中使用相对路径或名称,如XPath //?

或者是否可以在JQ中使用通配符,如.level1。*。level3.element?

2 个答案:

答案 0 :(得分:5)

..过滤器的含义是什么。用法如下:

.level1 | .. | .level3? .element

注意:您必须使用?否则会导致错误,因为它会递归没有相应属性的对象。

答案 1 :(得分:3)

相对于杰夫的回答还有两点:

(1)使用?的替代方法是使用objects,例如

.level1 | .. | objects | .level3.element

(2)通常,人们希望消除与不匹配指定尾随键的路径相对应的空值。要消除ALL null,一个选项是使用过滤器:select(。!= null)。

另一方面,如果想要保留显示为值的空值,那么可以使用paths,如下所示:

.level1
| (paths | select( .[-2:] == ["level3", "element"])) as $path
| getpath($path)

(由于paths产生一个字符串数组流,上面的表达式产生一个值对应于以.level3.element结尾的路径的值。

等效但是作为一个单行:

.level1 | getpath(paths | select(.[-2:] == ["level3","element"]))