JQ:将变量 属性 添加到现有对象
JQ: add variable property to existing object
我正在尝试将可变属性添加到一些现有的 json
{
"item1": {
"proerty1": "test"
},
"item2": {}
}
所以如果我做这样的事情就可以了
echo $contents | jq --arg ITEM1 $item1 '.[$ITEM1].property2 = "test2"'
但是当我尝试添加更多这样的参数时,它失败了:
echo $contents | jq --arg ITEM1 $item1 --arg PROPERTY2 $property2 --arg VALUE $value '.[$ITEM1].[PROPERTY2] = $VALUE'
我得到的错误是:
jq: error: syntax error, unexpected '[', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.[$ITEM1].[PROPERTY2] = $VALUE
jq: 1 compile error
所以我猜想 += 运算符不是对变量执行此操作的正确方法。在整个路径 .item.property 和值本身是变量
的情况下添加属性的正确方法是什么
jq 过滤器应该是:
.[$ITEM1][$PROPERTY2] = $VALUE
您的查询有一个额外的 .
。
备选方案:
您也可以使用 setpath/2
,例如
setpath([$ITEM1,$PROPERTY2]; $VALUE)
一边
通常最好引用您的 shell 变量,例如
echo "$contents" ...
我正在尝试将可变属性添加到一些现有的 json
{
"item1": {
"proerty1": "test"
},
"item2": {}
}
所以如果我做这样的事情就可以了
echo $contents | jq --arg ITEM1 $item1 '.[$ITEM1].property2 = "test2"'
但是当我尝试添加更多这样的参数时,它失败了:
echo $contents | jq --arg ITEM1 $item1 --arg PROPERTY2 $property2 --arg VALUE $value '.[$ITEM1].[PROPERTY2] = $VALUE'
我得到的错误是:
jq: error: syntax error, unexpected '[', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.[$ITEM1].[PROPERTY2] = $VALUE
jq: 1 compile error
所以我猜想 += 运算符不是对变量执行此操作的正确方法。在整个路径 .item.property 和值本身是变量
的情况下添加属性的正确方法是什么jq 过滤器应该是:
.[$ITEM1][$PROPERTY2] = $VALUE
您的查询有一个额外的 .
。
备选方案:
您也可以使用 setpath/2
,例如
setpath([$ITEM1,$PROPERTY2]; $VALUE)
一边
通常最好引用您的 shell 变量,例如
echo "$contents" ...