首页 > 解决方案 > 使用环境变量生成字段并将它们插入到对象中

问题描述

我有下面的 JSON,我需要在 env 变量的特定位置添加键和值。此外,如果可能的话,会尽量避免在 JSON 中进行任何硬编码

示例 JSON:

{
    "abc": {
        "admin": {
            "username": "admin",
            "password": "pa55word",
            "tenant_name": "t1"
        },
        "users": [
            {
                "username": "n1",
                "password": "password",
                "user_domain_name": "Default",
                "project_name": "p1",
                "project_domain_name": "Default"
            },
            {
                "username": "n2",
                "password": "password",
                "user_domain_name": "Default",
                "project_name": "p2",
                "project_domain_name": "Default"
            }
        ]       
    }
}

输出 json 需要如下所示,其中 in$AUTH$REG是 env 变量。

{
    "abc": {
        "auth_url": "$AUTH",
        "region_name": "$REG",
        "endpoint_type": "PRIVATE",
        "admin": {
            "username": "admin",
            "password": "pa55word",
            "tenant_name": "t1"
        },
        "users": [
            {
                "username": "n1",
                "password": "password",
                "user_domain_name": "Default",
                "project_name": "p1",
                "project_domain_name": "Default"
            },
            {
                "username": "n2",
                "password": "password",
                "user_domain_name": "Default",
                "project_name": "p2",
                "project_domain_name": "Default"
            }
        ]       
    }
}

看着 jq 但它似乎令人困惑。使用jq如何实现这一点?

标签: jsonenvironment-variablesjq

解决方案


从预设变量中获取AUTHREG环境变量$ENV并使用它们创建字段,然后将结果对象添加到输入的第一个成员。例如:

first(.[]) |= ( $ENV | {
    auth_url:      .AUTH,
    region_name:   .REG,
    endpoint_type: "PRIVATE"
  }
) + .

推荐阅读