Json
jq 列印鍵數組為空或缺少鍵的元素的值
{ "vehicle": [ { "type": "car", "features": [ { "airbags": "yes", "engine": [ { "electric": "yes", "horsepower": "1000" } ], "number": "ABCD 1234" } ], "price": "100000" }, { "type": "truck", "features": [], "price": "500000" }, { "type": "train", "features": [ { "airbags": "no", "engine": [ { "horsepower": "10000" } ], "number": "MNOPQRST" } ], "price": "100000" } ] }
使用
jq
orjmespath
,我想要type
where的值vehicle[].features[]
是空數組或缺少vehicle[].features[].engine[].electric
元素。所以這個 json 應該列出我
truck
,train
因為卡車有一個空數組vehicle[].features[]
,而火車缺少vehicle[].features[].engine[].electric
元素。
鑑於您的特定輸入似乎
features
並且engines
始終最多只有一個元素,您應該能夠:jq -r '.vehicle[] | select(.features[0].engine[0].electric != "yes").type'
或者:
jq -r '.vehicle[] | select(.features[0].engine[0] | has("electric") | not).type'
對於
type
那些vehicle
第engine
一個features
有鑰匙not
的人。electric
或者,如果您像我一樣
perl
已經知道或另一種程式語言,並且不想再學習另一種(並且非常具體)的語言,例如jq
s:perl -MJSON -l -0777 -ne ' $j = from_json($_); for (@{$j->{vehicle}}) { print $_->{type} unless $_->{features}[0]->{engine}[0]->{electric} eq "yes" }' < file.js
(或
unless defined($_->{features}[0]->{engine}[0]->{electric})
)。