Jq
使用 jq 檢索命令行上指定的欄位
鑑於此輸入
{ "attributes": { "f1": "one", "f2": "two", "f3": "three" } }
我希望能夠在 jq 命令行上指定要檢索哪些欄位並將它們的值吐出在同一行上以空格分隔。
jq -r 'some-filter' --argjson fields '["f3","f1"]' test.json
結果:
three one
jq -r 'some-filter' --argjson fields '["f2"]' test.json
結果:
two
我已經嘗試了這個過濾器的幾種變體,但沒有運氣
.attributes | $fields | . as $f | "\($f)"
您可以使用變數符號綁定(如您嘗試的那樣)來做到這一點
jq -r --argjson fields '["f3","f1"]' '[$fields[] as $f | .attributes | .[$f]] | join(" ")' test.json
或更緊湊
jq -r --argjson fields '["f3","f1"]' '[$fields[] as $f | .attributes[$f]] | join(" ")' test.json
但至少對於 jq 1.6,您似乎可以將
$fields[]
迭代器傳遞給表單的通用對象索引.[<string>]
jq -r --argjson fields '["f3","f1"]' '[.attributes[$fields[]]] | join(" ")' test.json
前任。
$ jq -r --argjson fields '["f3","f1"]' '[.attributes[$fields[]]] | join(" ")' test.json three one $ jq -r --argjson fields '["f2"]' '[.attributes[$fields[]]] | join(" ")' test.json two