簡體   English   中英

使用JQ從預過濾的JSON中提取鍵值對數組

[英]Extract an array of key-value pairs using JQ and from pre-filtered JSON

我想從下面的 JSON 中提取一組鍵值對,這是由以下 AWS CLI 腳本生成的。 該數組應包含負載均衡器名稱。

aws elbv2 describe-load-balancers | jq '.LoadBalancers[] | select(.LoadBalancerName | startswith("MY_LOAD_BALANCER_NAME"))'

我試着在這個腳本的末尾添加一個 JQ 過濾器,如下所示,但它不起作用:

aws elbv2 describe-load-balancers | jq '.LoadBalancers[] | select(.LoadBalancerName | startswith("MY_LOAD_BALANCER_NAME"))' | jq -r .LoadBalancers[].LoadBalancerName

這是我的 JSON output 的簡短版本:

{
    "LoadBalancers": [
        {
            "LoadBalancerArn": "arn:aws:elasticloadbalancing...",
            "CreatedTime": "2023-01-26T22:26:42.313000+00:00",
            "LoadBalancerName": "elb_name_123"
        },
        {
            "LoadBalancerArn": "arn:aws:elasticloadbalancing...",
            "CreatedTime": "2023-01-26T22:26:42.313000+00:00",
            "LoadBalancerName": "elb_name_456"
        },
        {
            "LoadBalancerArn": "arn:aws:elasticloadbalancing...",
            "CreatedTime": "2023-01-26T22:26:42.313000+00:00",
            "LoadBalancerName": "elb_name_789"
        }
    ]
}

不知道這是不是你要的output格式。 這個怎么樣?

cat output.json | jq '[.LoadBalancers[] | select(.LoadBalancerName | startswith("elb_name")) | { LoadBalancerName: .LoadBalancerName } ]'
[
  {
    "LoadBalancerName": "elb_name_123"
  },
  {
    "LoadBalancerName": "elb_name_456"
  },
  {
    "LoadBalancerName": "elb_name_789"
  }
]
$ cat output.json 
{
  "LoadBalancers": [
    {
      "LoadBalancerArn": "arn:aws:elasticloadbalancing...",
      "CreatedTime": "2023-01-26T22:26:42.313000+00:00",
      "LoadBalancerName": "elb_name_123"
    },
    {
      "LoadBalancerArn": "arn:aws:elasticloadbalancing...",
      "CreatedTime": "2023-01-26T22:26:42.313000+00:00",
      "LoadBalancerName": "elb_name_456"
    },
    {
      "LoadBalancerArn": "arn:aws:elasticloadbalancing...",
      "CreatedTime": "2023-01-26T22:26:42.313000+00:00",
      "LoadBalancerName": "elb_name_789"
    }
  ]
}

您不需要使用額外的jq來過濾 AWS cli 已經支持 jmespath。

您可以使用starts_with過濾負載均衡器

aws elbv2 describe-load-balancers --query 'LoadBalancers[?starts_with(LoadBalancerName, `elb_name`)].LoadBalancerName'

暫無
暫無

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

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