如何使用jq过滤JSON对象数组?
我有以下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": [ {
{
"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”},