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

如何用JavaScript将JSON中不同节点下的元素合并到同一节点?

实现思路与代码

首先要明确:你提供的原始JSON存在重复键问题——JavaScript对象(以及JSON规范)不允许同一层级有重复的键,直接用JSON.parse解析时,后面的SO会覆盖前面的,这也是你之前尝试失败的核心原因。所以得先处理原始JSON字符串,修复重复键,再进行数据扁平化。

步骤1:修复重复的SO键

通过正则把重复的SO键合并成一个数组,确保所有SO的内容都能被保留:

// 原始JSON字符串
const rawJson = `{
    "PO": [
        {
            "SO": [
                {
                    "B": "XXX",
                    "R": "YYY",
                    "F": "ZZZ"
                },
                {
                    "B": "MMM",
                    "R": "NNN",
                    "F": "PPP"
                }
            ],
            "SO": [
                {
                    "B": "111",
                    "R": "222",
                    "F": "333"
                },
                {
                    "B": "333",
                    "R": "444",
                    "F": "555"
                },
                {
                    "B": "666",
                    "R": "777",
                    "F": "888"
                }
            ]
        }
    ]
}`;

// 修复重复SO键:把多个SO合并成一个SO数组
const fixedJson = rawJson
  .replace(/"SO":\s*\[/g, (match, idx, str) => 
    idx === str.indexOf('"SO":') ? match : ', ' + match.slice(1)
  )
  .replace(/({)\s*"SO":/g, '$1 "SO": [');

步骤2:解析并扁平化数据

解析修复后的JSON,然后把所有SO下的B/R/F对象提取出来,替换原PO的内容:

// 解析为JavaScript对象
const parsedObj = JSON.parse(fixedJson);

// 扁平化数据:提取所有SO中的B/R/F对象
const flattenedData = {
  PO: parsedObj.PO.flatMap(poItem => poItem.SO.flat())
};

// 输出格式化后的结果
console.log(JSON.stringify(flattenedData, null, 4));

运行结果

执行后会得到你需要的格式:

{
    "PO": [
        {
            "B": "XXX",
            "R": "YYY",
            "F": "ZZZ"
        },
        {
            "B": "MMM",
            "R": "NNN",
            "F": "PPP"
        },
        {
            "B": "111",
            "R": "222",
            "F": "333"
        },
        {
            "B": "333",
            "R": "444",
            "F": "555"
        },
        {
            "B": "666",
            "R": "777",
            "F": "888"
        }
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:35:18