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

如何使用jq filter将嵌套JSON数据转换为包含扁平化data字段的单一对象?

解决JQ将嵌套数组转换为平级键值对并合并到同一对象的问题

我来帮你搞定这个问题!你当前的filter生成了多个独立对象,我们只需要把data数组处理成一个单对象,再和包含firstKey、id的原对象合并就能得到想要的结果。

输入JSON

{ "main": [ { "firstKey": "ABCD", "id": "12345", "data": [ { "name": "first_id", "value": "first_id_value" }, { "name": "second_id", "value": "second_id_value" }, { "name": "third_id", "value": "third_id_value" } ] } ] }

期望输出

{ "firstKey": "ABCD", "id": "12345", "data.name.first_id": "first_id_value", "data.name.second_id": "second_id_value", "data.name.third_id": "third_id_value" }

可行的JQ Filter

.main[] | . + (.data | reduce .[] as $item ({}; .["data.name.\($item.name)"] = $item.value))

分步解释

  1. .main[]:取出main数组中的单个对象(即使main里有多个元素,这个写法也能批量处理)。
  2. .data | reduce .[] as $item ({}; ...):遍历data数组,把每个item转换成键为data.name.xxx、值为对应value的键值对,最终合并成一个完整对象:
    • 初始值{}是一个空对象,作为迭代的起点
    • 每次迭代给空对象添加新的键值对:.["data.name.\($item.name)"] = $item.value
  3. +:把原对象(包含firstKey和id)和上面生成的平级键值对对象合并,得到最终的单对象结果。

这个方法完美适配data数组数量动态变化的场景,不管里面有多少个item,都会被转换成对应的平级键值对并合并到同一对象中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:02:28