我目前正在努力解决一些jq问题,希望有人能提供帮助。给出以下 JSON 结构:
[
{
"id": "100",
"input": "ChecklistState",
"value": "-",
"sub": [
{
"id": "110",
"input": "Text",
"value": "foo",
"sub": []
},
{
"id": "120",
"input": "ChecklistState",
"value": "OK",
"sub": []
},
{
"id": "130",
"input": "ChecklistState",
"value": "OK",
"sub": []
},
{
"id": "140",
"input": "ChecklistState",
"value": "OK",
"sub": []
}
]
}
]
我需要一个过滤器,当每个带有value 的子级都没有空且每个value都有 value时,该过滤器会更改"value"
为父"OK"
级 ( "id": "100"
) 。( -> 110 不为空,120、130 和 140“OK”)"sub"
"input"
"Text"
"value"
"input"
"ChecklistState"
"OK"
一个通用的过滤器(检查输入)会很棒,但我也不介意一个解决方案,我单独检查每个子 ID。
我尝试过访问子级的值并将
select(.sub[]?.id=="xxx").value
其连接到 if-then-else-end-Block 中,但结果是,条件似乎不起作用。
请注意:由于软件要求,我需要使用jq v1.5
这是从可查询的数组
from_entries
生成索引对象的一种方法:.sub
演示
在这种情况下,我将
all
直接将.sub
修改后的条件应用于数组。演示
输出: