この入力が与えられると
{
"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)"
ベストアンサー1
あなたできる試したとおり、変数シンボルバインディングを使用してこれを行います。
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