json - 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 和值本身是可变的情况下,添加属性的正确方法是什么
解决方案
jq 过滤器应该是:
.[$ITEM1][$PROPERTY2] = $VALUE
您的查询有一个额外的.
.
替代:
你也可以使用setpath/2
,例如
setpath([$ITEM1,$PROPERTY2]; $VALUE)
在旁边
通常最好引用你的 shell 变量,例如
echo "$contents" ...
推荐阅读
- r - 包反向依赖检查(尤其是在 Windows 上)
- firebase - Firebase 云函数:如何处理由另一个云函数引起的多个触发器?
- android - CardView 中的半透明背景无法正常工作
- frama-c - 如何分析像 open62541 这样的复杂项目?
- azure-cosmosdb - 如何合并一个文档 CosmosDb 的列表
- java - Java内部类使用来存储一个人的多个角色
- python - 为什么 Python 3 for 循环输出和行为不同?
- c# - NEST 会在 elasticsearch 中还是在客户端中进行项目?
- dictionary - 从值中提取字典键
- powerbi - DAX 中的分区计数