저는 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"]