繁体   English   中英

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

[英]How to filter an array of JSON objects with 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

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

使用jqselect过滤器:

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

使用--arg选项将参数传递给查询以避免注入。

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

jq手册教程食谱

或者,您也可以使用map()

jq '.zk_kafka | map(select(.InstanceType == "t2.medium"))' input.json

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM