使用新键和来自另一个键的值更新嵌套JSON数组



我有一个JSON文件,其中有任务ID。某些任务可能为空。我想将ID放入任务不为空的任务中。

[
{
"id": 1961126,
"tasks": [
{
"id": 70340700,
"title": "Test1",
},
{
"id": 69801130,
"title": "Test15A",
}
]
},
{
"id": 1961126,
"tasks": []
}           
]  

我想更新任务数组,使其看起来像

[
{
"id": 1961126,
"tasks": [
{
**"sId":1961126,**
"id": 70340700,
"title": "Test1",
},
{
**"sId":1961126,**
"id": 69801130,
"title": "Test15A",
}
]
},
{
"id": 1961126,
"tasks": []
}           
] 

我不知道如何将id从对象中获取到嵌套数组中。以下是我提出的

jq 'map(.tasks[0]|select( . != null )|.sId = .id)' file.json

这只是引入了相同的id。我已经厌倦了放入[].id,但我收到了一个错误Cannot index number with string "id".。我仍在学习如何处理嵌套数组和对象。

将ID保存在变量中,并将其作为新字段添加到每个数组成员中。

jq 'map(.id as $sId | .tasks[] += {$sId})' file.json

演示

注意#1:去掉每个对象中的最后一个,(请参阅Demo(,因为它不是合适的JSON。

注意#2:对象字段通常没有顺序,但如果您希望首先显示传播的ID,如预期输出中所示,您可以尝试用|= {$sId} + .替换+= {$sId}(它本身就是|= . + {$sId}的缩写(,以翻转生成顺序(Demo(。尽管不能保证它在进一步处理时会保持这种状态。

最新更新