以下のようなファイルがあります:
{
"repositories": [
{
"id": "156c48fc-f208-43e8-a631-4d12deb89fa4",
"namespace": "rhel12",
"namespaceType": "organization",
"name": "rhel6.6",
"shortDescription": "",
"visibility": "public"
},
{
"id": "f359b5d2-cb3a-4bb3-8aff-d879d51f1a04",
"namespace": "rhel12",
"namespaceType": "organization",
"name": "rhel7",
"shortDescription": "",
"visibility": "public"
}
]
}
while read -r line
を使用できるように、新しい行にそれぞれの名前の値のみを取得する必要があります。必要なのは
rhel6.6
rhel7
私は次のようにjqを使用していますが、動作しないようです:
jq -r '.[].name'
ここでjqの正しい使用を提案してください
|
演算子を使用してフィルターを結合する必要があります。
$ jq -r '.[] | .[] | .name' test.json
rhel6.6
rhel7
最初の.[]
はrepositories
配列をフェッチします。次の.[]
は、repositories
配列のすべてのアイテムを取得します。最後に、.name
は配列項目(オブジェクト)からプロパティを抽出します。
最初の.[]
は文書化された機能であるため、オブジェクトに対して機能します。
.[]
If you use the .[index] syntax, but omit the index entirely, it
will return all of the elements of an array...
You can also use this on an object, and it will return all the
values of the object.
入力を配列として扱うのではなく、リポジトリの配列を確認します。
$ jq -r '.repositories[].name' file
rhel6.6
rhel7
別の解決策があります。要件を想定
-r行の読み取り中に使用できるように、名前の値のみを新しい行で取得します。
Rhel12/rhel6.6形式で出力を取得する方法を教えてください。つまり、名前空間/名前の形式でo/pが必要です。
データがdata.json
にある場合、コマンド
jq -M -r '.repositories[] | "\(.namespace)/\(.name)"' data.json
生産すべき
rhel12/rhel6.6
rhel12/rhel7