我有一个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(。尽管不能保证它在进一步处理时会保持这种状态。