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

ich folgendes zu tun:Wie überspringen Iteration in JQ

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

Ich möchte überspringen, wenn der 1. weiterhin falsch

Erforderliche Leistung:

{"cpu":3} 
+0

Können Sie das tun? Mann, der downvote gibt – aerokite

Antwort

1

@ aerofile-kite - Dein erster Instinkt ist richtig. Sie müssen map nicht verwenden und in Ihrem Fall ist es wahrscheinlich effizienter, sie nicht zu verwenden. Im Anschluss an Ihrer Linie des Denkens, könnten Sie schreiben:

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

oder kurz und bündig:

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

Ok. Deine Antwort löst meine Suche nach anderen Teilen – aerokite

1

Verwendung map(select(...)):

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

Danke. Ich war auf der Suche nach diesem – aerokite