假設我有以下 JSON 物件(這只是一個示例):
{
"foo": 1,
"bar": 2,
"baz": 3
}
以及以下 JSON 陣列(另一個示例):
["foo", "baz"]
如何使用jq輸出以下物件?
{
"foo": 1,
"baz": 3
}
我討厭問這個問題,因為我確信它之前已經得到了回答,但是谷歌讓我失望了,我的 jq-fu 并不是解決這個問題所需要的。
uj5u.com熱心網友回復:
假設這.是物件并且$arr是陣列,則以下方法可以解決問題
delpaths(keys - $arr | map([.]))
uj5u.com熱心網友回復:
使用 areduce迭代構建結果物件將是一種方法:
echo '["foo", "baz"]' | jq --argjson index '{"foo":1,"bar":2,"baz":3}' '
reduce .[] as $x ({}; .[$x] = $index[$x])
'
使用JOIN、創建鍵值對和使用from_entries組裝將是另一種方式:
echo '["baz", "foo"]' | jq --argjson index '{"foo":1,"bar":2,"baz":3}' '
JOIN($index; .) | map({key:.[0], value:.[1]}) | from_entries
'
輸出:
{
"foo": 1,
"baz": 3
}
uj5u.com熱心網友回復:
為了達到預期的結果,可以這樣寫:
jq '{foo, baz}'
這可以(帶著相當大的恐懼)通過文本爭論成為給定問題的解決方案,例如:
jq "$(echo '["foo", "baz"]' | jq -Rr '"{" .[1:-1] "}" ')"
或者
jq "$(echo '["foo", "baz"]' | sed -e 's/\[/{/' -e 's/\]/}/')"
uj5u.com熱心網友回復:
這是一個無需減少的解決方案,它假設 $keys 是感興趣的鍵陣列,并且可能比涉及陣列減法的解決方案更有效:
. as $in | INDEX( $keys[]; $in[.] )
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473555.html
