
本文旨在提供一种将扁平化的 JSON 数据转换为具有层级嵌套结构的 JSON 数据的实用方法。通过 JavaScript 代码示例,详细讲解了如何根据 level 字段构建父子关系,从而实现 JSON 数据的层级化重构。 最终生成更易于理解和操作的树形结构数据。
在实际开发中,我们经常会遇到需要将扁平化的数据转换为树形结构的情况,尤其是在处理菜单、目录等具有层级关系的数据时。本文将提供一种使用 JavaScript 将扁平化的 JSON 数据转换为嵌套 JSON 结构的方法。 核心思路是根据数据中的层级关系(例如,level 字段)来构建父子关系,从而生成具有 subNav 属性的嵌套 JSON 结构。
以下是一个 JavaScript 函数,可以将具有 level 属性的扁平 JSON 数组转换为嵌套的 JSON 结构:
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
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 {
// 否则,找到父节点并添加到其 subNav 属性中
const parentLevel = metaData.level - 1;
const parentItem = itemMap[parentLevel];
if (!parentItem.subNav) {
parentItem.subNav = [];
}
parentItem.subNav.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));代码解释:
通过使用 buildNestedStructure 函数,我们可以方便地将扁平化的 JSON 数据转换为嵌套的 JSON 结构,从而更易于处理和展示具有层级关系的数据。 这种方法的核心在于使用 itemMap 来快速查找父节点,从而避免了不必要的遍历,提高了效率。 此外,该方法也具有一定的灵活性,可以根据实际需求进行修改和扩展。
以上就是将扁平化的 JSON 数据转换为嵌套结构的 JSON的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号