将扁平化的 JSON 数据转换为嵌套结构的 JSON


将扁平化的 json 数据转换为嵌套结构的 json

本文旨在提供一种将扁平化的 JSON 数据转换为具有层级嵌套结构的 JSON 数据的实用方法。通过 J*aScript 代码示例,详细讲解了如何根据 level 字段构建父子关系,从而实现 JSON 数据的层级化重构。 最终生成更易于理解和操作的树形结构数据。

在实际开发中,我们经常会遇到需要将扁平化的数据转换为树形结构的情况,尤其是在处理菜单、目录等具有层级关系的数据时。本文将提供一种使用 J*aScript 将扁平化的 JSON 数据转换为嵌套 JSON 结构的方法。 核心思路是根据数据中的层级关系(例如,level 字段)来构建父子关系,从而生成具有 subN* 属性的嵌套 JSON 结构。

实现方法

以下是一个 J*aScript 函数,可以将具有 level 属性的扁平 JSON 数组转换为嵌套的 JSON 结构:

seacms影视管理系统 seacms*管理系统

海洋*管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需5分钟即可建立一个海量的视频讯息的行业网站。 海洋cms采用PHP+MYSQL架构,原生PHP代码带来卓越的访问速度和负载能力免去您的后顾之优。海洋cms支持一键转换原max的模板和数据,实现网站无缝迁移到新平台。众多人性化功能设计,超

seacms影视管理系统 116 查看详情 seacms影视管理系统
function buildNestedStructure(data) {
  const topLevelItems = []; // 存储顶级节点
  const itemMap = {}; // 存储每个层级的最后一个节点,用于快速查找父节点

  for (const item of data) {
    const { title, metaData } = item;
    const newItem = { title, metaData };

    if (metaData.level === 1) {
      // 如果是顶级节点,直接添加到 topLevelItems
      topLevelItems.push(newItem);
    } else {
      // 否则,找到父节点并添加到其 subN* 属性中
      const parentLevel = metaData.level - 1;
      const parentItem = itemMap[parentLevel];

      if (!parentItem.subN*) {
        parentItem.subN* = [];
      }

      parentItem.subN*.push(newItem);
    }

    // 将当前节点添加到 itemMap 中,以便后续节点可以找到它作为父节点
    itemMap[metaData.level] = newItem;
  }

  return topLevelItems;
}

// 示例数据
const content = [
  { title: "Item 1", metaData: { "level": 1, "desc": "Some Desc 1", "displayOnOverview": true }},
  { title: "Item 2", metaData: { "level": 2, "desc": "Some Desc 2", "displayOnOverview": true }},
  { title: "Item 3", metaData: { "level": 2, "desc": "Some Desc 3", "displayOnOverview": false }},
  { title: "Item 4", metaData: { "level": 3, "desc": "Some Desc 4", "displayOnOverview": true }},
  { title: "Item 5", metaData: { "level": 1, "desc": "Some Desc 5", "displayOnOverview": true }}
];


// 调用函数并打印结果
const output = buildNestedStructure(content);
console.log(JSON.stringify(output, null, 2));

代码解释:

  1. buildNestedStructure(data) 函数: 接收一个扁平化的 JSON 数组 data 作为输入。
  2. topLevelItems 数组: 用于存储所有顶级节点(level 为 1 的节点)。
  3. itemMap 对象: 用于存储每个层级的最后一个节点。 它的键是层级值(metaData.level),值是该层级的最后一个节点对象。这使得我们能够快速找到每个节点的父节点,而无需遍历整个树。
  4. 循环遍历 data 数组:
    • 如果当前节点的 level 为 1,则将其直接添加到 topLevelItems 数组中。
    • 否则,通过 itemMap 找到其父节点(level 比当前节点小 1 的节点),并将当前节点添加到父节点的 subN* 数组中。如果父节点没有 subN* 数组,则先创建它。
  5. itemMap[metaData.level] = newItem;: 在每次循环中,将当前节点添加到 itemMap 中,以便后续节点可以找到它作为父节点。
  6. 返回 topLevelItems 数组: 该数组包含了所有顶级节点,每个顶级节点可能包含 subN* 数组,从而形成完整的嵌套结构。

注意事项

  • 确保输入数据中的 level 属性是正确的,并且层级关系是连续的。例如,如果存在 level 为 3 的节点,那么必须存在 level 为 2 的父节点。
  • 该方法假设数据是按照层级顺序排列的,即父节点出现在子节点之前。如果数据不是按照层级顺序排列的,可能需要先对数据进行排序。
  • metaData 中可以包含其他属性,如 desc 和 displayOnOverview,这些属性会被完整地保留在输出的 JSON 结构中。

总结

通过使用 buildNestedStructure 函数,我们可以方便地将扁平化的 JSON 数据转换为嵌套的 JSON 结构,从而更易于处理和展示具有层级关系的数据。 这种方法的核心在于使用 itemMap 来快速查找父节点,从而避免了不必要的遍历,提高了效率。 此外,该方法也具有一定的灵活性,可以根据实际需求进行修改和扩展。

以上就是将扁平化的 JSON 数据转换为嵌套结构的 JSON的详细内容,更多请关注其它相关文章!


# 键值  # Seo优化年度分析报告PPT  # 龙阳seo  # seo视频培  # 杨浦网站建设费用  # 做网络营销推广怎么群发  # 搜索优化排名seo服务  # 建设工程信用评价网站  # 烧烤店推广营销方案  # 巩义关键词排名  # 牙刷seo  # 为父  # 组中  # javascript  # 可以找到  # 最短  # 重构  # 遍历  # 扁平化  # 管理系统  # 转换为  # 排列  # json  # js  # java 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: yy漫画登录页面官方入口_yy漫画在线阅读网址入口  房产|直播|视频号怎么认证开通?|直播|需要什么资质?  FullCalendar自定义按钮样式定制指南  《大学搜题酱》官网地址登录  快手网页版官方访问 快手网页版页面在线打开  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  《搜书吧》阅读书籍方法  Python高效统计字典嵌套列表值在目标列表中的出现次数  除了Copilot,还有哪些值得一试的VS Code AI插件?  易车网官网直达入口 易车网在线登录入口  《七读免费小说》开通会员方法  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  《律学法考》查看学习数据方法  传统曲艺莲花落的表演形式是  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  魔法祈幻界兑换码礼包大全  海棠阅读登录教程_详细讲解海棠登录操作  sf漫画官网登录入口直达_sf漫画官方正版网址  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  VS Code快捷键when上下文子句的妙用  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  店铺如何关联视频号推广?视频号推广有什么用?  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  抖音号升级成企业资质怎么弄?有什么好处?  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  J*a实现任务清单管理_集合框架综合入门练手  百度网盘网页入口链接分享 百度网盘官网入口网页登录  React应用中Commerce.js数据加载与状态管理最佳实践  mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  《爱笔思画x》魔棒工具抠图教程  免费占卜在线神算_免费占卜手机神算  Golang如何使用log记录日志信息_Golang log日志记录方法总结  哔哩哔哩在线观看入口 B站官网免费进入  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  邮编号码查询app有哪些_邮编号码查询推荐app及使用体验  @Team是什么?揭秘团队含义  b站怎么查看视频的码率_b站视频码率查看方法  PHP与SQL实践:高效实现数据复制与特定列值修改 

 2025-10-09

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.