JSON文件
当前的
{
"auths": {
"test": {
"auth": "testserfdddd"
}
}
}
期望的
{
"auths": {
"test": {
"auth": "testserfdddd"
},
"myrepo.com" {
"auth": "passworder"
}
}
}
测试
作为命令行上的一个简单测试,我执行以下操作:
cat .docker/config.json | jq '.auths += {"myrepo.com": {"auth": "passworder"}}'
结果是我想要的
{
"auths": {
"test": {
"auth": "testserfdddd"
},
"repo.com": {
"auth": "test"
}
}
}
但是我希望通过 bash 脚本执行相同的逻辑。
Bash 脚本
REPO=repo.com
PASSWD=passworder
$JQ --arg repo "$REPO" --arg passwd "$PASSWD" '.auths.[$repo] += {"auth": $passwd}' .docker/config.json
但是,这会覆盖test.auth
torepo.com.auth
并且不会添加到auths
密钥
运行 bash 脚本时的结果提供以下结果
{
"auths": {
"repo.com": {
"auth": "passworder
}
}
}
前一个对象被完全覆盖。我需要在jq
表达式中适应的模式通常是什么?由于参数repo
是唯一的(test
与不同repo.com
),为什么该+=
操作在 bash 脚本中不起作用?
JQ 要求将密钥放在括号中:
与White Owl 的回答相比,使用稍微简化的语法:
If
auth
是叶子对象中的唯一键,或者保证叶子对象不存在: