Jq

使用 jq 檢索命令行上指定的欄位

  • June 12, 2022

鑑於此輸入

{
 "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

引用自:https://unix.stackexchange.com/questions/705796