简体   繁体   English

JQ:向现有对象添加变量属性

[英]JQ: add variable property to existing object

I'm trying to add variable properties to some existing json我正在尝试将变量属性添加到一些现有的 json

{
  "item1": {
    "proerty1": "test"
  },
  "item2": {}
}

So if I do something like this it works所以如果我做这样的事情它会起作用

echo $contents | jq --arg ITEM1 $item1 '.[$ITEM1].property2 = "test2"'

But when I try to add more arguments like this it fails:但是当我尝试添加更多这样的参数时,它失败了:

echo $contents | jq --arg ITEM1 $item1 --arg PROPERTY2 $property2 --arg VALUE $value  '.[$ITEM1].[PROPERTY2] = $VALUE'

The error I get is:我得到的错误是:

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

So I guess += operator wouldn't be the correct way to do this with variables.所以我猜 += 运算符不是使用变量执行此操作的正确方法。 What would be the correct way to add a propetry where the whole path .item.property and the value itself are variable添加属性的正确方法是什么,其中整个路径 .item.property 和值本身是可变的

The jq filter should be: jq 过滤器应该是:

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

Your query has an extra .您的查询有一个额外的. . .

An alternative:替代:

You could also use setpath/2 , eg你也可以使用setpath/2 ,例如

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

Aside在旁边

It's usually best to quote your shell variables, eg echo "$contents" ...通常最好引用您的 shell 变量,例如echo "$contents" ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM