JavaScript解析任意形式的json树型结构展示

为了解析任意形式的JSON树型结构,我们可以使用递归函数来实现。这里提供以下步骤:

  1. 获取JSON数据,并将其转换为JavaScript对象。
  2. 建立一个树形结构,通常使用ul和li元素,表示根节点和子节点。
  3. 创建递归函数。该函数将遍历树的节点,找到每个节点的子节点,并将它们添加到相应的父节点下。

以下是一个简单的示例:

假设我们有以下JSON数据:

{
  "id": 1,
  "name": "Parent",
  "children": [
    {
      "id": 2,
      "name": "Child1"
    },
    {
      "id": 3,
      "name": "Child2",
      "children": [
        {
          "id": 4,
          "name": "GrandChild1"
        },
        {
          "id": 5,
          "name": "GrandChild2"
        }
      ]
    }
  ]
}

我们可以将其转换为JavaScript对象:

const data = {
  "id": 1,
  "name": "Parent",
  "children": [
    {
      "id": 2,
      "name": "Child1"
    },
    {
      "id": 3,
      "name": "Child2",
      "children": [
        {
          "id": 4,
          "name": "GrandChild1"
        },
        {
          "id": 5,
          "name": "GrandChild2"
        }
      ]
    }
  ]
};

接下来我们需要创建树的根元素,并为每个节点创建ul和li元素:

const treeRoot = document.createElement('ul');
const parentNode = document.createElement('li');
const child1Node = document.createElement('li');
const child2Node = document.createElement('li');
const grandChild1Node = document.createElement('li');
const grandChild2Node = document.createElement('li');

treeRoot.appendChild(parentNode);
parentNode.appendChild(child1Node);
parentNode.appendChild(child2Node);
child2Node.appendChild(grandChild1Node);
child2Node.appendChild(grandChild2Node);

现在我们可以创建递归函数来遍历节点,并将子节点添加到它们的父节点中:

function createTreeNode(node, parentNode) {
  const newNode = document.createElement('li');
  const nodeText = document.createTextNode(node.name);
  newNode.appendChild(nodeText);

  parentNode.appendChild(newNode);

  if (node.children && node.children.length > 0) {
    const childList = document.createElement('ul');
    newNode.appendChild(childList);

    node.children.forEach(childNode => {
      createTreeNode(childNode, childList);
    });
  }
}

createTreeNode(data, treeRoot);

这个递归函数将从根节点开始遍历树,为每个节点创建一个li元素,并将它添加到相应的父节点中。如果节点具有子节点,它会创建一个ul元素,并继续遍历节点。

下面是使用上述函数显示示例JSON数据的完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JSON Tree Example</title>
</head>
<body>
  <div id="tree"></div>

  <script>
    const data = {
      "id": 1,
      "name": "Parent",
      "children": [
        {
          "id": 2,
          "name": "Child1"
        },
        {
          "id": 3,
          "name": "Child2",
          "children": [
            {
              "id": 4,
              "name": "GrandChild1"
            },
            {
              "id": 5,
              "name": "GrandChild2"
            }
          ]
        }
      ]
    };

    const treeRoot = document.createElement('ul');

    function createTreeNode(node, parentNode) {
      const newNode = document.createElement('li');
      const nodeText = document.createTextNode(node.name);
      newNode.appendChild(nodeText);

      parentNode.appendChild(newNode);

      if (node.children && node.children.length > 0) {
        const childList = document.createElement('ul');
        newNode.appendChild(childList);

        node.children.forEach(childNode => {
          createTreeNode(childNode, childList);
        });
      }
    }

    createTreeNode(data, treeRoot);

    document.getElementById('tree').appendChild(treeRoot);
  </script>
</body>
</html>

运行这个代码后,您将在页面上看到一棵包含所有节点的树形结构。

另外一个示例是一个更复杂的JSON数据。假设我们有以下JSON数据:

{
  "id": 1,
  "name": "Parent",
  "children": [
    {
      "id": 4,
      "name": "Child1",
      "children": [
        {
            "id": 11,
            "name": "GrandChild1",
            "children": [
                {
                    "id": 21,
                    "name": "GreatGrandChild1",
                    "children": [
                        {
                            "id": 31,
                            "name": "GreatGreatGrandChild1"
                        }
                    ]
                },
                {
                    "id": 22,
                    "name": "GreatGrandChild2",
                    "children": [
                        {
                            "id": 32,
                            "name": "GreatGreatGrandChild2"
                        }
                    ]
                }
            ]
        },
        {
            "id": 12,
            "name": "GrandChild2",
            "children": [
                {
                    "id": 23,
                    "name": "GreatGrandChild3",
                    "children": [
                        {
                            "id": 33,
                            "name": "GreatGreatGrandChild3"
                        }
                    ]
                },
                {
                    "id": 24,
                    "name": "GreatGrandChild4",
                    "children": [
                        {
                            "id": 34,
                            "name": "GreatGreatGrandChild4"
                        }
                    ]
                }
            ]
        }
      ]
    },
    {
      "id": 5,
      "name": "Child2",
      "children": [
        {
            "id": 13,
            "name": "GrandChild3",
            "children": [
                {
                    "id": 25,
                    "name": "GreatGrandChild5",
                    "children": [
                        {
                            "id": 35,
                            "name": "GreatGreatGrandChild5"
                        }
                    ]
                },
                {
                    "id": 26,
                    "name": "GreatGrandChild6",
                    "children": [
                        {
                            "id": 36,
                            "name": "GreatGreatGrandChild6"
                        }
                    ]
                }
            ]
        },
        {
            "id": 14,
            "name": "GrandChild4",
            "children": [
                {
                    "id": 27,
                    "name": "GreatGrandChild7",
                    "children": [
                        {
                            "id": 37,
                            "name": "GreatGreatGrandChild7"
                        }
                    ]
                },
                {
                    "id": 28,
                    "name": "GreatGrandChild8",
                    "children": [
                        {
                            "id": 38,
                            "name": "GreatGreatGrandChild8"
                        }
                    ]
                }
            ]
        }
      ]
    }
  ]
}

可以使用上面相同的方法来解析并显示任意JSON树形数据,此处不再赘述。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript解析任意形式的json树型结构展示 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js中匿名函数的创建与调用方法分析

    js中匿名函数的创建与调用方法分析 什么是匿名函数? 匿名函数,即没有名字的函数。通常用于定义一些只会在一处被使用的函数,或进行一些临时的任务。 在JavaScript中,我们可以通过以下2种方式定义匿名函数。 方法一:直接通过字面量方式定义 这种方式定义的匿名函数称为匿名函数表达式。例子如下: var sayHello = function() { con…

    JavaScript 2023年5月27日
    00
  • BootstrapValidator不触发校验的实现代码

    BootstrapValidator是一个基于Bootstrap的jQuery表单验证插件,可以方便地在页面中对表单进行校验。有时候需要手动控制校验,在一些特定的场景中,需要用户触发校验的时候才进行校验,那么在这种情况下,我们应该如何实现呢? 以下是实现“BootstrapValidator不触发校验”的完整攻略: 1. 关闭自动校验 首先,需要将Boots…

    JavaScript 2023年6月10日
    00
  • 基于JS实现PHP的sprintf函数实例

    基于JS实现PHP的sprintf函数实例 背景介绍 在PHP开发中,经常使用sprintf来格式化输出字符串,该函数支持各种数据类型的格式化输出,是一种非常实用的函数。而在JS中,却并没有提供类似sprintf函数的实现。本文通过自己编写JS的sprintf函数来实现对PHP sprintf的替代。 实现步骤 步骤1:了解sprintf函数 在开始编写我们…

    JavaScript 2023年5月19日
    00
  • javascript英文日期(有时间)选择器

    当网站中需要用户选择日期和时间时,JavaScript提供了丰富、易于使用的日期选择器插件。其中,datetimepicker是一款基于jQuery库的优秀插件,它支持多语言、时间格式定义、时间范围限制等功能,可以帮助我们实现英文日期(有时间)选择器。 下面是详细的步骤: 步骤1:引入所需资源文件 在网页的head部分引入datetimepicker插件所需…

    JavaScript 2023年5月27日
    00
  • 事件模型在各浏览器中存在差异

    事件模型是一种编程模型,用于处理图形用户界面(GUI)的事件响应。每个浏览器都有自己的事件模型实现,这意味着浏览器之间存在一些差异。在编写跨浏览器兼容性代码时,需要考虑这些差异。 以下是几种常见的事件模型: 1. DOM0模型 DOM0模型是最早的事件模型,它是在没有标准化的时候由Netscape Navigator引入的。在DOM0模型中,事件处理程序被直…

    JavaScript 2023年6月10日
    00
  • JS去掉字符串中所有的逗号

    要去掉一个JavaScript字符串中的所有逗号,可以使用replace()方法。以下是详细步骤: 步骤1:使用正则表达式查找所有的逗号,并替换为一个空字符串。在replace方法中,正则表达式为/,/g,其中第一个斜杆表示开始正则表达式,中间的逗号表示要替换的字符,第二个斜杆表示正则表达式的结束,而字母”g”表示全局标志,指示替换所有匹配的字符串。 步骤2…

    JavaScript 2023年5月28日
    00
  • JS实现环形进度条(从0到100%)效果

    JS实现环形进度条(从0到100%)效果 简介 环形进度条是一种常用的进度展示方式,它以环形的形式展示出进度的百分比。在这个攻略中,我们将通过JS实现一个从0到100%的环形进度条,并提供两个示例说明。 实现 HTML结构 首先,我们需要在HTML中创建一个div元素,该元素包含两个子元素,用于实现环形进度条的效果。 <div class="…

    JavaScript 2023年6月11日
    00
  • JavaScript内存管理介绍

    接下来我将分享关于JavaScript内存管理的完整攻略,包括内存分配、垃圾回收和常见的内存泄漏问题。 什么是JavaScript内存管理 JavaScript内存管理是指控制内存分配和垃圾回收的过程。JavaScript运行时环境会自动为每个脚本分配一定的内存,然后在代码执行期间将变量、函数和对象等存储在分配的内存空间中。当不再需要这些变量、函数和对象时,…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部