Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jq过滤JSON对象数组?_Json_Jq - Fatal编程技术网

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

如何使用jq过滤JSON对象数组?,json,jq,Json,Jq,我有以下JSON输入: { "zk_kafka": [ { "InstanceType": "t2.medium", "zkMemory": "16", "kafkaMemory": "8" }, { "InstanceType": "t2.small", "zkMemory": "8", "kafkaMemory": "4" } ], "es_hdfs": [ {

我有以下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

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

使用
jq
select
过滤器:

jq '.zk_kafka | .[] | select(.InstanceType == "t2.medium")'
使用
--arg
选项将参数传递给查询以避免注入

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

jq
有a、a和a。

向我们展示您的输入和预期输出,而不是陈述一个
X-Y
问题这次我为您写了一个问题,但下次阅读报价时效果很好。但是请记住,必须根据
sed
{“InstanceType”:“t2.medium”,“zkmary”:“16”,“kafkaMemory”:“8”}、{“InstanceType”:“t2.small”、“zkmary”:“8”、“kafkaMemory”:“4”}这是我的块。如果匹配t2.medium,那么它应该给我整个块,t2.medium将来自变量。在模式中,我手动给t2.medium,它工作,但不接受变量。如果您已经
jq
,为什么要使用
sed
?忘记
sed
<代码>jq是您所需要的全部。编辑你的问题。显示完整的输入、完整的命令和预期的输出。{“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”}]}当匹配t2.medium时,我需要来自zk_kafka的块。预期输出为{“InstanceType”:“t2.medium”,“zkMemory”:“16”,“kafkaMemory”:“8”},