在下面的示例 json 中,我可以使用以下命令过滤费用为空的记录jq -M ' map(select(.charge == null)) '
[
{
"id": 1,
"name": "vehicleA",
"state": "available",
"charge": 100
},
{
"id": 2,
"name": "vehicleB",
"state": "available",
},
{
"id": 3,
"name": "vehicleB",
"state": "available",
"charge": 50
}
]
Run Code Online (Sandbox Code Playgroud)
返回:
{
"id": 2,
"name": "vehicleB",
"state": "available",
}
Run Code Online (Sandbox Code Playgroud)
如何仅获取id
与过滤记录关联的值id
,以便将此步骤添加到上述查询中将返回2
?
如果您想要免费项目的 id 数组,您可以使用此过滤器:
.items | map(select(.charge == null) | .id)
Run Code Online (Sandbox Code Playgroud)
如果您希望枚举值而不是收集到数组中,则更好:
.items[] | select(.charge == null) | .id
Run Code Online (Sandbox Code Playgroud)
你的问题并不完全准确:
map(select(.charge == null))
不是示例中的对象,而是单个对象的数组.id
在任何情况下,您都可以从结果中提取map
:
jq -M 'map(select(.charge == null)) | .[].id' file.json
Run Code Online (Sandbox Code Playgroud)