使用 jq(在另一个级别)用另一个 json 更新一个 json 文件中的密钥对
Update keypairs in one json file with another json using jq (at another level)
我有两个文件:
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
)?
你可以简单地 运行:
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.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
)?
你可以简单地 运行:
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 的内容 ...