给定一个对象列表,包含许多我不想要的键:
[{
"name": "Alice",
"group": "Admins",
"created": "2014"
}, {
"name": "Bob",
"group": "Users",
"created": "2014"
}]
如何过滤这些对象以仅包含我想要的键?
[{
"name": "Alice"
}, {
"name": "Bob"
}]
我尝试了jq '.[].name'
,但提取了值,而不是保留对象。
答案 0 :(得分:19)
答案 1 :(得分:15)
如果您知道自己不想要的密钥,可以map
使用del
:
jq 'map(del (.group) | del (.created))'
答案 2 :(得分:3)
没有map
功能的另一种解决方案:
jq '[.[] | {name: .name}]'
答案 3 :(得分:3)
接受的答案(使用map
)和@ mauricio-tranjano的等效答案实际上会将指定的键添加到尚未拥有它的对象中。如果这不是您想要的行为,请考虑使用has(_)
,例如:
$ jq -c 'map( if has("a") then {a} else {} end )'
输入:
[{id:1,a:1}, {id:2}]
输出:
[{"a":1},{}]