jq - 오브젝트의 부모 값을 인쇄하려면 어떻게 해야 합니까?
변수 jsonVariable에 저장된 다음 JSON이 있다고 가정합니다.
{
"id": 1,
"details": {
"username": "jamesbrown",
"name": "James Brown"
}
}
이 JSON을 jq와 함께 해석하려면 다음을 사용합니다.
echo $jsonVariable | jq '.details.name | select(.name == "James Brown")'
이렇게 하면 내가 얻을 수 있는 결과물을 얻을 수 있을 것이다.
제임스 브라운
하지만 이 사람의 신분증도 얻으려면 어떻게 해야 하나요?이것은 대략적이고 간단한 예라는 것을 알고 있습니다.현재 사용하고 있는 프로그램은 5~6레벨로 되어 있으며, 선택 이외의 많은 JQ기능이 있습니다.다양한 필터링 방법을 실행한 후 이미 5~6층 깊이의 부모 필드를 선택할 수 있는 방법이 필요합니다.
누구 도와줄 사람?부모에게 돌아갈 '뒤로 돌리기' 방법은 없나요? (내 말이 맞는지 잘 모르겠네요!)
보다 일반적인 접근 방식을 사용하려면 "상위" 요소의 값을 원하는 상세 수준으로 저장한 다음 필터 끝에 파이프합니다.
jq '. as $parent | .details.name | select(. == "James Brown") | $parent'
물론, 노출되는 사소한 경우, 이것은 완전히 생략할 수 있습니다.
jq 'select(.details.name == "James Brown")'
또한 선택한 필터가 단일 부모 개체에 대해 일치하는 항목을 많이 반환하는 경우 각 일치 항목에 대한 부모 개체의 복사본을 받는다는 점을 고려하십시오.선택한 필터가 부모 레벨 이하의 모든 일치 항목을 어레이로 정리하여 부모 레벨에서1개의 요소만 반환하도록 하거나 최종 결과를 중복 배제하여unique
.
한 번 시도해 보세요.
echo $jsonVariable | jq '{Name: .details.name, Id: .Id} | select(.name == "James Brown")'
테스트할 값까지 쿼리하는 것이 아니라 쿼리할 값과 선택할 값을 포함하는 루트 개체까지 쿼리합니다.
이 두 가지를 모두 포함하는 오브젝트가 필요합니다.id
및 그name
.
$ jq --arg name 'James Brown' 'select(.details.name == $name).id' input.json
언급URL : https://stackoverflow.com/questions/38689645/jq-how-do-i-print-a-parent-value-of-an-object-when-i-am-already-deep-into-the
'programing' 카테고리의 다른 글
데이터 소스 없이 스프링 부트 응용 프로그램 (0) | 2023.03.18 |
---|---|
어레이 이름 없이 JSONArray를 가져오시겠습니까? (0) | 2023.03.18 |
Vagrant에서 호스트와 게스트 간의 동기화 지연 시간 단축(NFS 동기화 폴더) (0) | 2023.03.18 |
AngularJS는 이력 상태를 푸시하지 않고 리다이렉트한다. (0) | 2023.03.18 |
AngularJS DOM 선택기 (0) | 2023.03.18 |