2014-09-11 39 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

相關問題