如何使用jq过滤JSON对象数组? [英] How to filter an array of JSON objects with jq?

查看:755
本文介绍了如何使用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有一个手册,一个食谱.

这篇关于如何使用jq过滤JSON对象数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆