2017-09-06 161 views
0

我有以下的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" 
    } 
    ] 
} 

首先,我要選擇一個屬性名稱的數組。然後我想通過屬性InstanceType的值選擇數組的一個對象。

實施例的屬性zk_kafka和值t2.medium

{ 
    "InstanceType": "t2.medium", 
    "zkMemory": "16", 
    "kafkaMemory": "8" 
} 

我知道如何選擇陣列:

jq .zk_kafka 

但我不知道如何通過一個對象的陣列篩選適當的價值。

+2

向我們展示你的投入和預期產出,而不是說明一個'XY'問題 – Inian

+0

這一次,我寫的問題要問你,但下一次讀https://stackoverflow.com/help/mcve – ceving

回答

0

使用的jqselect過濾器:

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

使用--arg選項將參數傳遞給查詢。

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

jqmanual,一個tutorialcookbook

+0

嘿,這不是工作 –

+0

報價工作正常。但請記住,你必須根據'sed'的要求逃避正則表達式。 – ceving

+0

{ \t \t \t 「InstanceType」: 「t2.medium」, \t \t \t 「zkMemory」: 「16」, \t \t \t 「kafkaMemory」: 「8」 \t \t}, \t \t { \t \t \t 「InstanceType」: 「t2.small」, \t \t \t 「zkMemory」: 「8」, \t \t \t「kafkaMemory」:「4」 \t \t}這是我的block.If匹配t2.medium然後它應該給我整個塊和t2.medium將來自variable.In模式我給手動t2.medium和它的工作,但它不接受變量。 –