使用jq获取特定的键值对

时间:2017-11-21 20:20:03

标签: json bash jq

在下面的示例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
    }
  ]

返回:

{
  "id": 2,
  "name": "vehicleB",
  "state": "available",
}

如何只获取id以及与过滤记录的id相关联的值,以便将此步骤添加到上述查询中将返回2

2 个答案:

答案 0 :(得分:3)

您的问题并不准确:

  • 示例JSON无效,因为第二个对象的最后一个属性有一个尾随逗号,这会引发解析错误
  • map(select(.charge == null))的输出不是示例中的对象,而是单个对象的数组

在任何情况下,您都可以从.id的结果中提取map,如下所示:

jq -M 'map(select(.charge == null)) | .[].id' file.json

答案 1 :(得分:3)

如果你想要一个免费的项目数组,你可以使用这个过滤器:

.items | map(select(.charge == null) | .id)

Try it online at jqplay.org

如果您想要枚举的值而不是收集到数组中,那么更好:

.items[] | select(.charge == null) | .id

Try it online at jqplay.org