是否可以在JQ中使用相对路径或名称,如XPath //?
或者是否可以在JQ中使用通配符,如.level1。*。level3.element?
答案 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"]))