jq 过滤子对象值
jq Filter on sub object value
我有一个 json 文件 people.json:
{
"Joe" : {"Job" : "Clown", "Age" : 22},
"Sally" : {"Job" : "Programmer", "Age" : 32},
"Anne" : {"Job" : "Clown", "Age" : 29}
}
我想select每个人都是小丑。我的输出应该是这样的:
{
"Joe" : {"Job" : "Clown", "Age" : 22},
"Anne" : {"Job" : "Clown", "Age" : 29}
}
我试过
中的 .. 运算符
cat people.json | jq '. | map(select(.Job == "Clown"))'
但它似乎在多个层面上与乔和安妮相匹配,并且产生了比我想要的更多的输出。有任何想法吗?谢谢
使用 with_entries
转换 to/from 一种中间格式,将数据表示为具有 key
和 value
元素的对象数组:
cat people.json | jq 'with_entries(select(.value.Job == "Clown"))'
这是一个使用 reduce
的解决方案
. as $v
| reduce keys[] as $k (
{};
if $v[$k].Job == "Clown" then .[$k] = $v[$k] else . end
)
我有一个 json 文件 people.json:
{
"Joe" : {"Job" : "Clown", "Age" : 22},
"Sally" : {"Job" : "Programmer", "Age" : 32},
"Anne" : {"Job" : "Clown", "Age" : 29}
}
我想select每个人都是小丑。我的输出应该是这样的:
{
"Joe" : {"Job" : "Clown", "Age" : 22},
"Anne" : {"Job" : "Clown", "Age" : 29}
}
我试过
中的 .. 运算符cat people.json | jq '. | map(select(.Job == "Clown"))'
但它似乎在多个层面上与乔和安妮相匹配,并且产生了比我想要的更多的输出。有任何想法吗?谢谢
使用 with_entries
转换 to/from 一种中间格式,将数据表示为具有 key
和 value
元素的对象数组:
cat people.json | jq 'with_entries(select(.value.Job == "Clown"))'
这是一个使用 reduce
的解决方案 . as $v
| reduce keys[] as $k (
{};
if $v[$k].Job == "Clown" then .[$k] = $v[$k] else . end
)