2017-12-26 1 views
0

큰 데이터 집합으로 작업하고 있는데, 관심있는 데이터 만 포함하는 개체를 생성하는 데 JQ를 사용하고 있습니다. 문제를 설명하기 위해 샘플 데이터를 제공했습니다.JQ 개체에 배열 삽입

지금까지 2 객체 또는 2 배열을 추가하는 방법을 찾았지만 플랫 필드 집합을 가져 와서 배열을 기본 json에 대한 subObject로 추가하려고합니다.

tmpData.txt 지금까지

{ 
"id": "0001", 
"type": "donut", 
"name": "Cake", 
"ppu": 0.55, 
"batter": [{ 
     "id": "1001", 
     "type": "Regular", 
     "status":{ 
      "complete": false 
     } 
    }, 
    { 
     "id": "1002", 
     "type": "Chocolate", 
     "status":{ 
      "complete": false 
     } 
    }, 
    { 
     "id": "1003", 
     "type": "Blueberry", 
     "status":{ 
      "complete": false 
     } 
    }, 
    { 
     "id": "1004", 
     "type": "Devil's Food", 
     "status":{ 
      "complete": false 
     } 
    } 
] 
} 

, 내가 온 가장 가까운 단지 1 시간을 최상위 수준 필드를 출력이

cat tmpData.txt | jq '[{id, type}] + [(.batter[] | {batterId: .id, complete: .status.complete})]'

이지만, 각각의 타자는 자신의 개체입니다입니다 이 전체 출력을 1 개체로해야합니다.

[ 
    { 
    "id": "0001", 
    "type": "donut" 
    }, 
    { 
    "batterId": "1001", 
    "complete": false 
    }, 
    { 
    "batterId": "1002", 
    "complete": false 
    }, 
    { 
    "batterId": "1003", 
    "complete": false 
    }, 
    { 
    "batterId": "1004", 
    "complete": false 
    } 
] 

내 이상적인 출력과 같을 것이다 다음

{ 
"id": "0001", 
"type": "donut", 
"batter": [{ 
    "id": "1001", 
    "complete": false 
    }, 
    { 
    "id": "1002", 
    "complete": false 
    }, 
    { 
    "id": "1003", 
    "complete": false 
    }, 
    { 
    "id": "1004", 
    "complete": false 
    }] 
} 

당신은 내가 알아야 할 모든 것을 포함 한 단일 개체가 볼 수 있으며, 중복 또는 불필요한 데이터가 없기 때문에 . ID와 상태를 가진 타자 배열이 포함 된 단일 개체를 출력하고 싶습니다.

+1

에 대해 작동으로 표현 될 것입니다 방법하시기 바랍니다 질문을 편집하여 질문을 짧고, 명확하고, 일관성 있고, 완전하게 만드십시오. 예를 들어 "이상적인 출력"은 잘립니다. 또한 "이상적인 출력"의 .batter 배열에는 {id : _, complete : _} 형식의 요소가 있지만 시도에는 "batterId"및 "status"가 있습니다. – peak

+0

@ 피크 감사합니다. 질문을 명확하게 수정하고 필터를 수정했습니다. 나는 네가 내 마지막 질문에 대답했다고 믿는다. – Goldfish

+0

명확성을 위해 단축 된 질문 – Goldfish

답변

0

jq는 + 연산자를 사용하여 동일한 데이터 유형을 추가하는 것만 지원합니다. 객체에 배열을 추가하거나 그 반대로 배열을 추가 할 수 없습니다.

개체에 배열을 추가하려면 배열에 개체를 포함하고 배열이 들어있는 개체의 키를 제공해야합니다. 우리는 JSON 구조에 대해 생각하고 경우에 의미가 배열을 JSON 객체

다음 명령은 tmpData.txt 파일

cat tmpData.txt | jq '{id, type} + {Batters: [(.batter[] | {batterId: .id, batterType: .type, status: .status.complete})]}'

출력

{ 
    "id": "0001", 
    "type": "donut", 
    "Batters": [ 
    { 
     "batterId": "1001", 
     "batterType": "Regular", 
     "status": false 
    }, 
    { 
     "batterId": "1002", 
     "batterType": "Chocolate", 
     "status": false 
    }, 
    { 
     "batterId": "1003", 
     "batterType": "Blueberry", 
     "status": false 
    }, 
    { 
     "batterId": "1004", 
     "batterType": "Devil's Food", 
     "status": false 
    } 
    ] 
}