2014-09-11 80 views

回答

4

这就是..过滤器的意思。使用应该是这样的:

.level1 | .. | .level3? .element 

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

(1)使用一种?替代方法是使用objects,例如:

+0

钍为你的答案,我会测试它。问号只是一个问号而不是通配符字符:-) – tfb785 2014-09-11 08:25:08

+0

“通配符”部分是“..”,而不是“?”。当试图访问'level3'属性时,'?'只是忽略错误。 – 2014-09-11 13:56:46

2

两个相对于Jeff的答案附加分

.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"])) 
+0

感谢您消除空值的方法:'.level1 | .. |对象| .level3.element |选择(。!= null)' – nik 2017-09-05 07:50:05

相关问题