2016-10-03 16 views
0

有沒有辦法讓jq輸出路徑本身可以讀取?jq以一種本身可以讀取的方式輸出路徑的方法?

示例輸入:

{ 
    "foo": [{ 
     "bar": 2, 
     "bor": 3 
    }] 
} 

輸出通過例如位置和「bar」的值:

jq -c 'tostream | select(.[0]|index("bar"))' 
[["foo",0,"bar"],2] 

有一種方法,以代替輸出在jq路徑選擇格式的路徑,即.foo[0].bar

回答

1

jq can讀取指定爲JSON數組的路徑。特別參見getpathsetpathfromstream也讀取陣列格式的路徑。

0

據我所知,目前還沒有內建的方法可以實現,但它不應該花太多時間才能推出實施方案。

只有三種情況需要擔心:路徑爲空時,路徑包含一個字符串,路徑包含一個數字。

如果它是空的,它只是指輸入本身。如果它是一個字符串,它是一個對象的屬性。如果它是一個數字,它是一個數組的索引。

所以,你可以這樣做:

def to_expression($path): $path | 
    if length == 0 
     then "." 
     else map(
      if type == "string" 
       then ".\"\(.)\"" 
      elif type == "number" 
       then "[\(.)]" 
      else 
       error("unexpected path type: \(type)") 
      end 
     ) | add 
    end; 

注意,這總包在引號中的屬性名稱。這不是嚴格要求,但比試圖找出是否真的需要更容易。

相關問題