【发布时间】:2021-08-14 21:31:17
【问题描述】:
好的,我花了很多时间在这上面。 使用 jq,我想测试一个元素是否存在于数组中,如果是则能够修改该元素,如果不将该元素添加到该数组中
我读过
这给出了提示但我被卡住了
假设我有一个像这样的 json 文件:
{
"LOGIN":"user",
"COPY": [
{
"CHAINLIST":"chain1",
"ELEMENT": [ "element1-1","element1-2" ]
},
{
"CHAINLIST":"chain2",
"ELEMENT": [ "element2-1","element2-2" ]
}
]
}
我想将元素添加到基于 CHAINLIST id 的 COPY 数组中,比如说这 3 个元素:
//ELEM A
{
"CHAINLIST":"chain3",
"ELEMENT": [ "element3-1" ]
}
//ELEM B
{
"CHAINLIST":"chain2",
"ELEMENT": [ "element2-1","element2-3" ]
}
//ELEM C
{
"CHAINLIST":"chain1",
"ELEMENT": [ "element1-1","element1-2" ]
}
ELEM A 有 CHAINLIST id chain3 没有退出 COPY 数组 _> 让我们添加它
ELEM B 已经存在于 COPY 数组中,我想更新 ELEMENT 数组 新值的内容
ELEM C已经存在并且是最新的,我不需要做任何事情。
在我的示例中,最终的 json 对象是
{
"LOGIN":"user",
"COPY": [
{
"CHAINLIST":"chain1",
"ELEMENT": [ "element1-1","element1-2" ]
},
{
"CHAINLIST":"chain2",
"ELEMENT": [ "element2-1","element2-2","element2-3" ]
},
{
"CHAINLIST":"chain3",
"ELEMENT": [ "element3-1"]
}
]
}
我正在使用 jq 将元素 Elem 添加到对象 Obj 的过程是:
Elem.CHAINLIST 存在于 Obj.COPY [] 中?
是的:将 Elem.ELEMENT 添加到 Obj.ELEMENT[] 中,对 qvoid 重复项具有唯一性
no : 将 Elem 添加到 Obj.COPY[]
我得到的最好的是
(if .COPY[]? | select (.CHAINLIST=="chain3") == "" then . else .COPY[.COPY | length ] |= . + { "CHAINLIST":"chain3","ELEMENT":[ "element3-1"]} end )
但是select (.CHAINLIST=="chain3") == "" 什么也没返回,我可以弄清楚如何测试是否为空。
感谢您的宝贵时间!
【问题讨论】: