私はJQに最初に触れました、そして次のjsonファイルがあります:
[
{
"userId" : "jens",
"firstName" : "jens",
"lastName" : "jens",
"emailAddress" : "[email protected]",
"source" : "default",
"status" : "active",
"readOnly" : false,
"roles" : [ "reader" ],
"externalRoles" : [ ]
}, {
"userId" : "admin",
"firstName" : "Administrator",
"lastName" : "User",
"emailAddress" : "[email protected]",
"source" : "default",
"status" : "changepassword",
"readOnly" : false,
"roles" : [ "app-admin" ],
"externalRoles" : [ ]
}]
今、私は次の形式を印刷したいと思います。
"userId" : "jens","roles" : [ "reader" ]
"userId" : "admin", "roles" : [ "app-admin" ],
この目標をどのように達成できますか?このコマンドを試してみました。
jq -r '.[].userId,.[].roles'
ただし、以下のようにデータが分散されます。
jens
admin
[]
[
"reader",
"app-admins",
]
上記の出力がどのように得られるかをご案内ください。
答え1
そうすれば
jq -c '.[] | {userid: .userId, roles: .roles}'
あなたは得るでしょう
{"userid":"jens","roles":["reader"]}
{"userid":"admin","roles":["app-admin"]}
この-c
フラグは各オブジェクトを独自の行に配置するため、入れ子になったオブジェクトがない限り、必要に応じて機能します。中括弧の削除などの後処理:
jq -c '.[] | {userid: .userId, roles: .roles}' | sed -e 's/^{//g' -e 's/}$//g'
生産する
"userid":"jens","roles":["reader"]
"userid":"admin","roles":["app-admin"]