Wil*_*hes 18 json filtering key jq
给定一个对象列表,我不想要许多键:
[{
"name": "Alice",
"group": "Admins",
"created": "2014"
}, {
"name": "Bob",
"group": "Users",
"created": "2014"
}]
Run Code Online (Sandbox Code Playgroud)
如何过滤这些对象以仅包含我想要的键?
[{
"name": "Alice"
}, {
"name": "Bob"
}]
Run Code Online (Sandbox Code Playgroud)
我已经尝试jq '.[].name'但是提取值,而不是保留对象.
Gir*_*ish 21
您可以使用该map()功能过滤任何键:
jq 'map({name: .name})'
Run Code Online (Sandbox Code Playgroud)
建议者@WilfredHughes:以上过滤器可以缩写如下:
jq 'map({name})'
Run Code Online (Sandbox Code Playgroud)
Han*_* Z. 16
你可以使用map与del如果你知道的钥匙你不想要的:
jq 'map(del (.group) | del (.created))'
Run Code Online (Sandbox Code Playgroud)
接受的答案(带有map)和 @mauricio-tranjano 的等效答案实际上会将指定的键添加到尚不具有该键的对象中。如果这不是您想要的行为,请考虑使用has(_),例如:
$ jq -c 'map( if has("a") then {a} else {} end )'
Run Code Online (Sandbox Code Playgroud)
输入:
[{id:1,a:1}, {id:2}]
Run Code Online (Sandbox Code Playgroud)
输出:
[{"a":1},{}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8574 次 |
| 最近记录: |