我有不想修改的 json 文件。问题是,json 文件中的目标键有所不同。例如这两个 json:
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"bar1": ["TEMPLATE"]
}
}
}]
}
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": ["TEMPLATE"]
}
}
}]
}
我想以动态方式bar1
更改键的值。different1
键的路径在所有 json 中都是不变的,因此使用 jq 时,它会是:
jq '.tasks[0].params.foo' my_json_file.json
我已经尝试过以下代码:
new_value="something"
jq --arg new "$new_value" '.tasks[0].params.foo[] = $new' my_json_file.json
但这样 key 的值bar1
将"something"
代替["something"]
.写出来的结果是
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": "something"
}
}
}]
}
而不是我想要的:
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": ["something"]
}
}
}]
}
我很确定这对 jq 来说并不难,但我找不到解决方案。
答案1
关于什么 ... ?
jq --arg new "something" '.tasks[0].params.foo[] = [ $new] ' file
答案2
您可以使用with_entries(..)
并直接操作数组values[]
而无需访问密钥
jq --arg new "something" '.tasks[0].params.foo |= with_entries(.value[] = $new)'