如何使用jq过滤JSON对象数组?

时间:2017-09-06 08:12:14

标签: json jq

我有以下JSON输入:

{
  "zk_kafka": [
    {
      "InstanceType": "t2.medium",
      "zkMemory": "16",
      "kafkaMemory": "8"
    },
    {
      "InstanceType": "t2.small",
      "zkMemory": "8",
      "kafkaMemory": "4"
    }
  ],
  "es_hdfs": [
    {
      "InstanceType": "t2.medium",
      "esMemory": "16",
      "hdfsMemory": "8"
    },
    {
      "InstanceType": "t2.small",
      "esMemory": "8",
      "hdfsMemory": "4"
    }
  ]
}

首先,我想通过属性名称选择一个数组。然后我想通过属性InstanceType的值选择数组的对象。

属性zk_kafka和值t2.medium的示例:

{
  "InstanceType": "t2.medium",
  "zkMemory": "16",
  "kafkaMemory": "8"
}

我知道如何选择数组:

jq .zk_kafka

但我不知道如何通过属性值过滤对象数组。

1 个答案:

答案 0 :(得分:9)

使用select的{​​{1}}过滤器:

jq

使用jq '.zk_kafka | .[] | select(.InstanceType == "t2.medium")' 选项将参数传递给查询。

--arg

jq --arg instance "t2.medium" '.zk_kafka | .[] | select(.InstanceType == $instance)' 有一个manual,一个tutorial和一个cookbook