簡體   English   中英

使用 jq 根據另一個鍵/值對查找鍵/值對

[英]Using jq find key/value pair based on another key/value pair

我在這里粘貼了一個 JSON 示例數據,它需要一些操作才能獲得所需的輸出,在下一節中提到要在這段 JSON 代碼之后閱讀。

我想使用 jq 來解析我想要的數據。

{
"MetricAlarms": [
    {
        "EvaluationPeriods": 3,
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "AlarmActions": [
            "Unimportant:Random:alarm:ELK2[10.1.1.2]-Root-Disk-Alert"
        ],
        "AlarmName": "Unimportant:Random:alarm:ELK1[10.1.1.0]-Root-Alert",
        "Dimensions": [
            {
                "Name": "path",
                "Value": "/"
            },
            {
                "Name": "InstanceType",
                "Value": "m5.2xlarge"
            },
            {
                "Name": "fstype",
                "Value": "ext4"
            }
        ],
        "DatapointsToAlarm": 3,
        "MetricName": "disk_used_percent"
    },
    {
        "EvaluationPeriods": 3,
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "AlarmActions": [
            "Unimportant:Random:alarm:ELK2[10.1.1.2]"
        ],
        "AlarmName": "Unimportant:Random:alarm:ELK2[10.1.1.2]",
        "Dimensions": [
            {
                "Name": "path",
                "Value": "/"
            },
            {
                "Name": "InstanceType",
                "Value": "r5.2xlarge"
            },
            {
                "Name": "fstype",
                "Value": "ext4"
            }
        ],
        "DatapointsToAlarm": 3,
        "MetricName": "disk_used_percent"
    }
]
}

因此,當我將一些 Key1 和 value1 作為參數“Name”:“InstanceType”傳遞給 JQ 時,可能使用 cat | jq 和預期的輸出應該如下

m5.2xlarge
r5.2xlarge

一種在輸入中遞歸搜索鍵值對 ( sk - sv ) 並從找到的對象中提取另一個鍵值 ( pv ) 的通用方法:

jq -r --arg sk Name         \
      --arg sv InstanceType \
      --arg pv Value        \
'.. | objects | select(contains({($sk): $sv})) | .[$pv]' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM