You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jq为嵌套JSON数组非空任务新增父级ID字段sId的实现问题

正确的jq处理语句如下:

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

原代码的问题说明:

  1. 你使用.tasks[0]仅能选中tasks数组的第一个元素,无法遍历数组内所有子对象
  2. 没有提前存储外层父对象的id值,赋值语句.sId = .id中上下文指向的是当前子任务对象,所以取到的是任务自身的id而非外层父id
  3. 管道逻辑直接将外层父对象替换为修改后的任务对象,会丢失外层的id、tasks等原有字段

语句逻辑解释:

  • map(...) 遍历外层JSON数组的所有元素,处理完成后保留原数组结构返回
  • .id as $s_id 将当前遍历到的外层父对象的id值存储为变量$s_id,避免后续上下文切换后无法拿到该值
  • .tasks[]? |= (...) 遍历tasks数组的所有子元素执行修改,?为安全操作符,遇到空tasks数组时不会抛出错误
  • . + {"sId": $s_id} 为每个任务子对象新增sId字段,值为提前存储的父对象id,同时保留任务本身的所有原有字段

内容的提问来源于stack exchange,提问作者MeanOtter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:36:02