有沒有辦法讓jq
輸出路徑本身可以讀取?jq以一種本身可以讀取的方式輸出路徑的方法?
示例輸入:
{
"foo": [{
"bar": 2,
"bor": 3
}]
}
輸出通過例如位置和「bar」的值:
jq -c 'tostream | select(.[0]|index("bar"))'
[["foo",0,"bar"],2]
有一種方法,以代替輸出在jq
路徑選擇格式的路徑,即.foo[0].bar
?
有沒有辦法讓jq
輸出路徑本身可以讀取?jq以一種本身可以讀取的方式輸出路徑的方法?
示例輸入:
{
"foo": [{
"bar": 2,
"bor": 3
}]
}
輸出通過例如位置和「bar」的值:
jq -c 'tostream | select(.[0]|index("bar"))'
[["foo",0,"bar"],2]
有一種方法,以代替輸出在jq
路徑選擇格式的路徑,即.foo[0].bar
?
jq can讀取指定爲JSON數組的路徑。特別參見getpath
和setpath
。 fromstream
也讀取陣列格式的路徑。
據我所知,目前還沒有內建的方法可以實現,但它不應該花太多時間才能推出實施方案。
只有三種情況需要擔心:路徑爲空時,路徑包含一個字符串,路徑包含一個數字。
如果它是空的,它只是指輸入本身。如果它是一個字符串,它是一個對象的屬性。如果它是一個數字,它是一個數組的索引。
所以,你可以這樣做:
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;
注意,這總包在引號中的屬性名稱。這不是嚴格要求,但比試圖找出是否真的需要更容易。