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

如何使用jq将JSON父项值映射到同级子数组生成指定结构

用jq实现所需格式转换的解决方案

没问题,这个需求用jq的几个基础操作组合起来就能轻松实现,我直接给你可行的命令和详细解释:

完整jq命令

jq '[ .[] | .parent as $parent | .children | to_entries | map([$parent, .key, .value]) ] | flatten'

命令拆解(每一步对应转换逻辑)

  • .[]:先遍历输入数组中的每一个父对象(也就是{"parent": "x", ...}和{"parent": "y", ...}这两个元素)
  • .parent as $parent:把当前父对象的parent字段值存到变量$parent里,避免后续重复读取,也让代码更清晰
  • .children:提取当前父对象的children数组(比如第一个对象的["a", "b"])
  • to_entries:这是关键一步!它会把数组转换成包含索引和值的键值对数组,比如["a", "b"]会变成[{"key":0,"value":"a"}, {"key":1,"value":"b"}],这里的key就是你需要的child_order_number
  • map([$parent, .key, .value]):把每个键值对转换成你要的["parent", 序号, "child"]格式数组
  • 外层的[] + 最后的flatten:把每个父对象生成的子数组嵌套结构(比如[[["x",0,"a"],...], [["y",0,"c"],...]])拉平成一维数组,得到最终的输出格式

测试示例

假设你的输入JSON保存在input.json文件里,运行以下命令就能得到结果:

jq '[ .[] | .parent as $parent | .children | to_entries | map([$parent, .key, .value]) ] | flatten' input.json

运行后输出就是你想要的:

[ ["x", 0, "a"], ["x", 1, "b"], ["y", 0, "c"], ["y", 1, "d"], ["y", 2, "e"] ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:39:14