【问题标题】:JQ - Remove Duplicate Array ValuesJQ - 删除重复的数组值
【发布时间】:2022-07-06 01:48:44
【问题描述】:

我正在使用以下 jq 查询来提取 AWS ARN 和相关协议。但是,我只需要列出 ARN 后跟端口和协议

我的代码是jq -r '.Listeners[] | .LoadBalancerArn',结果是

"arn:aws:elasticloadbalancing:us-xxxx-1:123456789:loadbalancer/app/msword-123456789/20b73abcde"
"arn:aws:elasticloadbalancing:us-xxxx-1:123456789:loadbalancer/app/msword-123456789/20b73abcde"
"arn:aws:elasticloadbalancing:us-xxxx-1:123456789:loadbalancer/app/msword-123456789/20b73abcde"

我已经尝试了所有方法,包括 unique、first、unique_by、select、contains 等。结果总是“无法迭代字符串”或数字

示例 JSON

{
    "Listeners": [
        {        
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-xxxx-1:123456789:loadbalancer/app/msword-123456789/20b73abcde",
            "Port": 9090,
            "Protocol": "HTTP"
        },
        {        
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-xxxx-1:123456789:loadbalancer/app/msword-123456789/20b73abcde",
            "Port": 80,
            "Protocol": "HTTP"
            },
        {       
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-xxxx-1:123456789:loadbalancer/app/msword-123456789/20b73abcde",
            "Port": 443,
            "Protocol": "HTTPS"
        }
    ]
}

【问题讨论】:

    标签: json jq


    【解决方案1】:

    unique 适用于数组,因此您需要先创建一个包含所有LoadBalancerArn 的数组,然后调用unique 并获取剩余数组的first

    .Listeners | map(.LoadBalancerArn) | unique | first
    

    【讨论】:

    • 这很好,但是当我想添加到结果中时,例如 .Listeners[] | (map(.LoadBalancerArn) | unique | first) , (.Protocol) 我再次收到错误 Cannot index string with string "LoadBalancerArn"
    【解决方案2】:

    这是否产生了您的预期?

    jq -r '.Listeners |
          group_by(.LoadBalancerArn)[] |
          first |
          "\(.LoadBalancerArn) \(.Protocol)"
          ' input.json
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      相关资源
      最近更新 更多