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

问题描述:

我有以下JSON输入:

I have the following JSON input:

{
  "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的值选择数组的对象.

First I want to select an array by a property name. And then I want to select an object of the array by the value of the property InstanceType.

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

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

我知道如何选择数组:

jq .zk_kafka

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

But I do not know how to filter the array of object by a property value.

使用jqselect过滤器:

jq '.zk_kafka | .[] | select(.InstanceType == "t2.medium")'

使用--arg选项将参数传递给查询.

Use the --arg option to pass an argument to the query.

jq --arg instance "t2.medium" '.zk_kafka | .[] | select(.InstanceType == $instance)'

jq有一个手册,一个食谱.