10

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

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

4

2 回答 2

12

这就是..过滤器要表示的内容。使用看起来像这样:

.level1 | .. | .level3? .element

注意:你必须使用,?否则你会得到错误,因为它会递归不具有相应属性的对象。

于 2014-09-11T07:09:06.713 回答
8

与杰夫的回答相关的两点:

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

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

(2) 通常人们会想要消除与指定的尾随键不匹配的路径对应的空值。要消除所有空值,一种选择是添加过滤器:select(. != null)。

另一方面,如果想要保留确实作为值出现的空值,那么一种可能性是使用paths如下:

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

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

等效但作为单行:

.level1 | getpath(paths | select(.[-2:] == ["level3","element"]))
于 2015-12-30T06:55:52.280 回答