代码之家  ›  专栏  ›  技术社区  ›  Bill

用变量替换值-jq

  •  1
  • Bill  · 技术社区  · 6 年前

    我可以计算出如何用jq替换变量中的值,

    $ jq -n --arg name bar '{"name":$name}'
    
    {
      "name": "bar"
    }
    

    {
      ...
      "snstopic": {
        "topic-project1": "team-project1-dev",
        "topci-project2": "team-project2-dev",
        ...  (different json files have different number of sns topics)
      },
     ...
    }
    

    我设置这些环境变量:

    $ export AWS_DEFAULT_REGION=us-east-2
    $ export AWS_ACCOUNT_ID=123456789012
    $ export ARN_PREFIX="arn:aws:sns:${AWS_DEFAULT_REGION}:${AWS_ACCOUNT_ID}:"
    

    {
      ...
      "snstopic": {
        "topic-project1": "arn:aws:sns:us-east-2:123456789012:team-project1-dev",
        "topci-project2": "arn:aws:sns:us-east-2:123456789012:team-project2-dev",
        ...  (different json files have different number of sns topics
      },
     ...
    }
    

    如何将其添加到 .snstopic ?

    1 回复  |  直到 6 年前
        1
  •  3
  •   peak    6 年前

    简而言之: map_values

    假设您的模板位于template.json文件中。然后,以下脚本将执行指定的转换:

    #!/bin/bash
    # As far as this example is concerned,
    # there is no need to export any variables
    AWS_DEFAULT_REGION=us-east-2
    AWS_ACCOUNT_ID=123456789012
    ARN_PREFIX="arn:aws:sns:${AWS_DEFAULT_REGION}:${AWS_ACCOUNT_ID}:"
    
    jq --arg prefix "$ARN_PREFIX" '
      .snstopic |= map_values($prefix + .)
    ' template.json
    

    模板.json

    {
      "snstopic": {
        "topic-project1": "team-project1-dev",
        "topci-project2": "team-project2-dev"
      }
    }
    

    输出:

    {
      "snstopic": {
        "topic-project1": "arn:aws:sns:us-east-2:123456789012:team-project1-dev",
        "topci-project2": "arn:aws:sns:us-east-2:123456789012:team-project2-dev"
      }
    }