首页 > 解决方案 > JQ:将变量属性添加到现有对象

问题描述

我正在尝试将变量属性添加到一些现有的 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 和值本身是可变的情况下,添加属性的正确方法是什么

标签: jsonsyntaxenvironment-variablesjq

解决方案


jq 过滤器应该是:

.[$ITEM1][$PROPERTY2] = $VALUE

您的查询有一个额外的..

替代:

你也可以使用setpath/2,例如

setpath([$ITEM1,$PROPERTY2]; $VALUE)

在旁边

通常最好引用你的 shell 变量,例如 echo "$contents" ...


推荐阅读