我有一个名为version6json
的json对象,如下所示
{
"20007.098": {
"os_version": "6.9",
"kernel": "2.6.32-696",
"sfdc-release": "2017.08"
},
"200907.09678”: {
"os_version": "6.9",
"kernel": "2.6.32-696",
"sfdc-release": "201.7909"
},
"206727.1078”: {
"os_version": "6.9",
"kernel": "2.6.32-696.10.2.el6.x86_64",
"sfdc-release": "20097.109”
}
}
我想再添加一对键值对。键也是变量,值也是。 bundle_release =“ 2019.78”和value = {“ release”:“ 2018.1006”,“ kernel”:“ 2.6.32-754.3.5.el6.x86_64”,“ os”:“ 6.10”,“ current”:true} 现在,我希望将bundle_release作为键并将其值作为其值,因此新条目将为“ 2018.1006”:{“ release”:“ 2018.1006”,“ kernel”:“ 2.6.32-754.3.5.el6.x86_64”, “ os”:“ 6.10”,“ current”:true}
为此,我正在做以下事情
echo "$version6json" | jq --arg "$bundle_release" "$value" '. + {$bundle_release: "${value}"}'
将提供任何帮助。
P-S-根据峰的建议对问题进行编辑
答案 0 :(得分:1)
首先,在使用变量的方式指定键名时,必须将变量括在括号中,这样您就可以:
{($bundle_release): ...}
接下来,jq变量与shell变量不同,应在不引用它们且不使用bash-ism的情况下指定它们。
第三,在设置名为value
的shell变量的值时,您必须适当地引用该表达式。
第四,为简化起见,请对--argjson
使用$value
。
第五,示例JSON不太正确。修复后,以下将在bash或类似bash的环境中工作(假设您使用的是支持--argjson
的jq版本):
bundle_release="1034,567"
value='{"release":"2018.1006","kernel":"2.6.32-754.3.5.el6.x86_64","os":"6.10","current":true}'
jq --arg b "$bundle_release" --argjson v "$value" '
. + {($b): $v}' <<< "$version6json"
答案 1 :(得分:1)
您没有为--arg
选项提供足够的参数:手册中:
--arg name value
:此选项将值作为预定义变量传递给jq程序。如果使用
--arg foo bar
运行jq,则$foo
在程序中可用,其值为"bar"
。请注意,值将被视为字符串,因此--arg foo 123
会将$foo
绑定到"123"
。