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

如何遍历节点树并修改结构与值?JSON树形结构转换实现

树形JSON结构转换解决方案

问题背景

输入的原始JSON树形数据(包含downlines子节点):

data = [
  {
    "user_id": "1",
    "username": "johndoe001",
    "amount": "0.00",
    "downlines": [
      {
        "user_id": "2",
        "username": "j001-01",
        "amount": "1.00",
        "downlines": []
      }
    ]
  }
]

需要转换为目标结构:

[
    {
      "key": "1",
      "label": "johndoe001 (0.00)",
      "nodes": [
        {
          "key": "2",
          "label": "j001-01 (1.00)",
          "nodes": []
        }
      ]
    }
]

用户尝试用字符串替换完成部分转换,但无法实现label字段合并username与amount,也无法删除多余的amount字段:

let stringJson = JSON.stringify(data);
stringJson = stringJson.replace(/downlines/g, 'nodes');
stringJson = stringJson.replace(/username/g, 'label');
stringJson = stringJson.replace(/user_id/g, 'key');
let tmpTree = JSON.parse(stringJson);

解决方法

由于是嵌套树形结构,需要递归遍历每个节点来完成字段的转换、合并与清理,具体代码如下:

function transformTree(data) {
  // 处理数组中的每个节点
  return data.map(node => {
    const transformedNode = {
      key: node.user_id,
      label: `${node.username} (${node.amount})`,
      // 递归处理子节点
      nodes: transformTree(node.downlines || [])
    };
    return transformedNode;
  });
}

// 使用示例
const transformedData = transformTree(data);
console.log(JSON.stringify(transformedData, null, 2));

代码说明

  • 递归遍历:针对多层嵌套的树形结构,通过递归调用transformTree处理每个节点的downlines子数组,确保所有层级都被转换。
  • 字段合并:直接将username和amount拼接成label字段的内容,完全匹配需求格式。
  • 自动清理:新创建的对象仅保留需要的key、label、nodes字段,原始的冗余字段不会被包含,自然完成了多余字段的删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:16:01