【问题标题】:Update keypairs in one json file with another json using jq (at another level)使用 jq 用另一个 json 更新一个 json 文件中的密钥对(在另一个级别)
【发布时间】:2017-12-03 22:49:25
【问题描述】:

我有两个文件:

aws.json:
{
  "access_key_id": "MYSECRETKEYID",
  "secret_access_key": "mysecretaccesskey"
}



model.json:
{
    "access_key_id": "FREDSACCESSKEY",
    "secret_access_key": "fredssecretaccesskey",
    "ntp_servers_string": "1.2.3.4, 5.6.7.8",
    "metrics_ip": null,
    "pagerduty_enabled": false,
    "blobstore_type": "s3",
    "s3_blobstore_options": {
        "endpoint": "https://s3.amazonaws.com",
        "bucket_name": "s3-mybucket",
        "access_key_id": "vault-supplied-key",
        "secret_access_key": "vault-supplied-key",
        "signature_version": "4",
        "region": "us-east-1"
    },
    "database_type": "external"
}

我想使用 jq 来更新 s3_blobstore_options 键中的几个值,最终结果是这样的:

result.json:

{
    "access_key_id": "FREDSACCESSKEY",
    "secret_access_key": "fredssecretaccesskey",
    "ntp_servers_string": "1.2.3.4, 5.6.7.8",
    "metrics_ip": null,
    "pagerduty_enabled": false,
    "blobstore_type": "s3",
    "s3_blobstore_options": {
        "endpoint": "https://s3.amazonaws.com",
        "bucket_name": "s3-mybucket",
        "access_key_id": "MYSECRETKEYID",
        "secret_access_key": "mysecretaccesskey",
        "signature_version": "4",
        "region": "us-east-1"
    },
    "database_type": "external"
}

如果值没有嵌套,以下代码可以完美运行:

jq --argfile override aws.json '. + $override' model.json > result.json

有谁知道如何告诉 jq 我要更新较低级别的密钥对,而不是触摸较高级别的密钥对(即FREDSACCESSKEY)?

【问题讨论】:

    标签: json object merge edit jq


    【解决方案1】:

    你可以简单地运行:

    jq --argfile aws aws.json '.s3_blobstore_options += $aws' model.json
    

    或者如果 jq 过滤器在 aws.jq 中:

    jq --argfile aws aws.json -f aws.jq model.json
    

    这里的想法是,当将+ 应用于 JSON 对象时,RHS 对象中的值优先。

    jq 程序还有其他方法可以访问 aws.json 的内容...

    【讨论】:

    • 谢谢!第一个选项效果很好! (不确定 aws.jq 是什么,在我的机器上失败了)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多