ユーザーのフィールドが内部フィールドの場合は、そのフィールドを表示する必要があります。
入力する:
[
{
"name": "A_A",
"uri": "https:test/test",
"realm": "internal"
},
{
"name": "B_B",
"uri": "https:test/test",
"realm": "internal"
},
{
"name": "C_C",
"uri": "https:test/test",
"realm": "external"
}
]
試験を終えた:
jq 'if .[].realm == "internal" then .[].name else empty end'
しかし、問題はすべてのユーザーを一覧表示することです。
予想出力:
A_A , B_B
答え1
jq関数を使用できますselect
。
<file jq -r '.[] | select(.realm == "internal") | .name'
最初は.[]
配列要素を取得します。select()
正しい要素を含む個々の要素とフィルタに適用されますrealm
。最後の部分はname
フィールドを印刷します。
答え2
条件を歩かなければならない後ろにテストする単一のプロジェクトを繰り返します。
jq '.[]| (if .realm == "internal" then .name else empty end)'
答え3
@csv
ユーザーがCSV形式の出力を望むようですjq
。
このコマンドは、入力配列の各要素にステートメントをmap()
適用するためにも使用されます。select()
$ jq -r 'map(select(.realm == "internal").name)|@csv' file
"A_A","B_B"
これは、キー値に基づいて関連する配列エントリを選択し、ここからキー値を抽出してrealm
問題を解決したことを示しています。これにより、単一のCSVレコードとしてフォーマットされ、出力される値のname
配列が残ります。name
@csv