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

ベストアンサー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

おすすめ記事