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

Reh*_* Ch 10 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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

{
  "InstanceType": "t2.medium",
  "zkMemory": "16",
  "kafkaMemory": "8"
}
Run Code Online (Sandbox Code Playgroud)

我知道如何选择数组:

jq .zk_kafka
Run Code Online (Sandbox Code Playgroud)

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

cev*_*ing 22

使用以下select过滤器jq:

jq '.zk_kafka | .[] | select(.InstanceType == "t2.medium")'
Run Code Online (Sandbox Code Playgroud)

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

jq --arg instance "t2.medium" '.zk_kafka | .[] | select(.InstanceType == $instance)'
Run Code Online (Sandbox Code Playgroud)

jq手册,教程食谱.