json에서 특정 값(하위 개체당 한 행)만 인쇄하고 각 행의 최상위 개체에서 하나의 값을 반복하려고 합니다.
입력 예:
[
{
"name": "level1Name",
"lv1id": "id1",
"requests": [
{
"lv2id": "id2",
"name": "lvl2requestA",
"startDate": "2019-02-05 08:52:33.663+0000",
"requestState": "Succeeded"
},
{
"lv2id": "id2",
"name": "lvl2requestB",
"startDate": "2019-02-05 08:52:33.421+0000",
"requestState": "Succeeded"
}
]
},
{
"name": "level1Name",
"lv1id": "id12",
"requests": [
{
"lv2id": "id2",
"name": "lvl2requestD",
"startDate": "2019-02-05 08:52:19.823+0000",
"requestState": "Succeeded"
},
{
"lv2id": "id2",
"name": "lvl2requestA",
"startDate": "2019-02-05 08:52:19.689+0000",
"requestState": "Succeeded"
}
]
}
]
목표 출력
["id1","2019-02-05 08:52:33.663+0000","lvl2requestA","Succeeded"]
["id1","2019-02-05 08:52:33.421+0000","lvl2requestB","Succeeded"]
["id12","2019-02-05 08:52:19.823+0000","lvl2requestD","Succeeded"]
["id12","2019-02-05 08:52:19.689+0000","lvl2requestA","Succeeded"]
여러 번 시도했습니다(예: 변수/기호 바인딩 연산자 사용). 모든 리드를 환영합니다.
답변1
$ jq -c '.[] | .lv1id as $id | .requests[] | [$id, .startDate, .name, .requestState]' file.json
["id1","2019-02-05 08:52:33.663+0000","lvl2requestA","Succeeded"]
["id1","2019-02-05 08:52:33.421+0000","lvl2requestB","Succeeded"]
["id12","2019-02-05 08:52:19.823+0000","lvl2requestD","Succeeded"]
["id12","2019-02-05 08:52:19.689+0000","lvl2requestA","Succeeded"]
이는 최상위 배열( .[]
)의 각 요소를 가져와 해당 요소 .lv1id
를 에 할당합니다 $id
. 그런 다음 .requests[]
해당 요소 배열을 반복 하고 각 요소에 대한 출력 배열을 구성합니다.그것은$id
이전에 기억했던 부분을 포함하여 필요해 보이는 다양한 부분으로 구성된 요소입니다 .