jq –stream 手冊頁中路徑和葉數組的定義是什麼意思
在
jq
手冊頁中,--stream
選項說:以流方式解析輸入,輸出路徑和葉值數組(標量和空數組或空對象)。例如,
"a"
變成[[],"a"]
,[[],"a",["b"]]
變成[[0],[]]
,[[1],"a"]
,和[[1,0],"b"]
。我想知道“路徑和葉值數組”的含義以及為什麼輸入表示被轉換為:
"a" -> [[],"a"]
和
[[],"a",["b"]] -> [[0],[]] , [[1],"a"] , [[1,0],"b"]
我一直在審查像列表表示這樣的樹,但它並不相似。
這對
jq
1.6 版有效:在流模式下,您得到的是一系列對輸入中的數據進行編碼的數組。每個數組都由一個編碼路徑的數組和該路徑上的一個值組成(我相信你稱之為“葉值”)。為了表示流中對像或數組的終止,會發出一個沒有值的數組。
例如,JSON 對象
{"key":"value"}
將作為兩個數組進行流式傳輸[["key"],"value"] [["key"]]
第一個流數組由路徑和值組成。路徑很簡單
["key"]
,因為該鍵是頂級鍵。該路徑的值為"value"
。第二個數組只有路徑,沒有值,表示該流對象的結束(在輸出流中該對象將不再有鍵)。
另一個例子:
複合對象
{ "array": [ 1, 2, { "hello": "world" } ] }
將流式傳輸為
[["array",0],1] [["array",1],2] [["array",2,"hello"],"world"] [["array",2,"hello"]] [["array",2]] [["array"]]
第一個數組包含路徑
["array",0]
,即數組的第一個元素,它是頂級 key 的值array
。該路徑的值為1
。第二個數組包含路徑
["array",1]
,即同一數組的第二個元素,以及值2
。第三個數組包含路徑
["array",2,"hello"]
。該路徑表示hello
頂級 key 數組中第三個位置的鍵array
。該路徑的值為world
。然後是一組三個沒有值的數組,每個數組都表示 、 和 (分別)的最後一部分
.array[2].hello
已.array[2]
被.array
流式傳輸。
jq
1.6的手冊使用了範例[0,[1]]
,該範例作為四個數組進行流式傳輸[[0],0] [[1,0],1] [[1,0]] [[1]]
很難看出這裡發生了什麼,因為只有兩個整數
0
和1
在數據中,將它們更改為字元串"a"
,"b"
我們得到[[0],"a"] [[1,0],"b"] [[1,0]] [[1]]
同樣,有兩個具有路徑和值的數組,然後是兩個數組,它們終止僅包含 的子數組
"b"
和頂級數組。讓這個例子更短,第一個數組簡單地說有一個路徑,
[0]
即頂級對象必須是一個數組,"a"
在第一個位置有一個值。路徑[1,0]
表示頂級數組的第二個元素的第一個元素,其值為"b"
。要回答您關於為什麼
"a"
流式傳輸的明確問題[[],"a"]
:路徑[]
表示不屬於任何其他對像或數組的事物。該路徑的值為"a"
。也就是說,您有一個"a"
既不是對像也不是數組的一部分。