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

Mir*_*ert 5 jq json-path-expression

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

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

pea*_*eak 8

与杰夫的回答有关的另外两点:

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

.level1 | .. | objects | .level3.element
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

等效但作为单行:

.level1 | getpath(paths | select(.[-2:] == ["level3","element"]))
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供消除空值的方法:`.level1 | .. | 对象 | .level3.element | 选择(。!= null)` (2认同)

Jef*_*ado 7

这就是..过滤器的意思.使用方式如下:

.level1 | .. | .level3? .element
Run Code Online (Sandbox Code Playgroud)

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