json 출력을 쉼표로 구분된 한 줄로 인쇄합니다.

json 출력을 쉼표로 구분된 한 줄로 인쇄합니다.

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

관련 정보