2016-11-23 1 views
1
{ "items":[ 
    { 
     "metadata":{"name":"127.0.0.1"}, 
     "status":{ 
     "capacity":{"cpu":3} 
     } 
    }, 
    { 
     "metadata":{"name":"127.0.0.2"}, 
     "status":{ 
     "capacity":{"cpu":8} 
     } 
    } ] } 

에 반복을 생략하는 방법 :나는 다음을 수행 할 JQ

.items[] | if .metadata.name=="127.0.0.1" then {cpu: .status.capacity.cpu} else <<I want to skip>> end 

내가 1 계속 할 경우 건너 뛸 원하는이 거짓

필수 출력 :

{"cpu":3} 
+0

이 작업을 수행 할 수 있습니까? downvote주는 사람 – aerokite

답변

1

@ aerofile-kite - 첫 번째 본능이 옳습니다. map을 사용할 필요가 없으며 사용하지 않는 것이 더 효율적입니다. 생각의 당신의 라인을 따라, 당신은 쓸 수있다 : 더 간결

.items[] 
| if .metadata.name=="127.0.0.1" 
    then {cpu: .status.capacity.cpu} 
    else empty 
    end 

또는 :

.items[] 
    | select(.metadata.name=="127.0.0.1") 
    | { cpu: .status.capacity.cpu } 
+0

Ok. 당신의 대답은 다른 부분을 건너 뛰기위한 나의 탐구를 해결합니다. – aerokite

1

사용 map(select(...)) :

jq '.items|map(select(.metadata.name == "127.0.0.1"))|.[].status.capacity' items 
{ 
    "cpu": 3 
} 
+0

고마워요. 내가 이것을 찾고 있었다. – aerokite