【问题标题】:JQ: add variable property to existing objectJQ:将变量属性添加到现有对象
【发布时间】:2021-07-16 15:20:26
【问题描述】:

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

【问题讨论】:

    标签: json syntax environment-variables jq


    【解决方案1】:

    jq 过滤器应该是:

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

    您的查询有一个额外的.

    另一种选择:

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

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

    旁白

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-08
      • 2017-01-12
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多