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日

相关文章

  • 一个JavaScript获取元素当前高度的实例

    获取元素当前高度是前端开发中很常见的一个需求,使用JavaScript可以轻松实现。下面,我将为大家介绍详细的攻略。 一、获取元素高度的方法 我们可以通过以下两种方式获取元素的高度: offsetHeight属性:此属性可以获取元素的高度,包括padding和border,但不包括margin。 clientHeight属性:此属性可以获取元素的高度,包括p…

    JavaScript 2023年6月11日
    00
  • JS闭包原理与应用经典示例

    JS闭包是指一个函数能够访问它的外部函数作用域中定义的变量,即使在外部函数返回之后依然有效。 JS闭包原理 在JavaScript中,函数是一等公民,即函数可以作为参数、可以返回值、可以嵌套在另一个函数中,形成闭包。 当函数内部有东西被引用,这里面所引用的内容会一直存在,不会被垃圾回收器清除,这就形成了闭包。 在函数内部定义一个函数,内部函数可以访问外部函数…

    JavaScript 2023年6月11日
    00
  • js实现为a标签添加事件的方法(使用闭包循环)

    为 a 标签添加事件可以使用 JS来实现。其中最简单的方法就是通过给每个a标签添加 onclick 事件来实现。但是这种方式比较繁琐,尤其是当页面中大量的 a 标签时,维护起来会非常麻烦。因此我们可以使用闭包循环来为所有 a 标签添加事件。 以下是实现方式: 首先我们需要在 JS 文件中获取所有的 a 标签 const links = document.qu…

    JavaScript 2023年6月10日
    00
  • js+html获取系统当前时间

    获取系统当前时间是网页应用开发和Javascript开发中经常需要实现的功能之一。本篇攻略将详细介绍如何使用JS和HTML获取系统当前时间,包括获取本地系统时间和获取标准UTC时间的方法。下面是完整的攻略。 获取本地系统时间 要获取本地系统时间,我们可以使用JavaScript中内置的Date对象,该对象可以返回当前日期和时间的各个部分,例如年、月、日、小时…

    JavaScript 2023年5月27日
    00
  • 扒一扒JavaScript 预解释

    下面是关于 “扒一扒JavaScript 预解释” 的完整攻略: 什么是JavaScript预解释? JavaScript是一种解释型语言,它在运行前必须进行解释并执行代码,而预解释则是在JavaScript代码执行之前进行一遍解释的过程。预解释其实是JavaScript解释器在读取JavaScript代码时,先查找所有定义的变量、函数,并且把这些变量、函数…

    JavaScript 2023年5月18日
    00
  • 基于Cesium实现拖拽3D模型的示例代码

    下面是关于基于Cesium实现拖拽3D模型的示例代码的攻略。 1. 引入相关依赖 为了使用Cesium,我们需要先将Cesium的JavaScript和CSS文件导入到页面当中。在这个示例中,我们使用的是Cesium 1.75版本,您可以在官方网站上下载相应版本的文件并引入到HTML文件中: <!–引入Cesium的CSS和JavaScript文件-…

    JavaScript 2023年6月11日
    00
  • iOS WKWebView适配实战篇

    iOS WKWebView适配实战篇的完整攻略主要涉及以下几个方面: 1. 了解WKWebView WKWebView是苹果官方提供的一个用于iOS和macOS平台的现代化Web视图,可以直接预览网页,还支持JavaScriptCore和WebViewJavascriptBridge等桥接方式。相比于旧版的UIWebView,WKWebView更加内存友好、…

    JavaScript 2023年6月11日
    00
  • 深入浅出探究JavaScript中的async与await

    深入浅出探究JavaScript中的async与await 什么是async/await 在ES7中,JavaScript引入了async/await关键字,用于解决异步编程的问题。async表示函数是异步的,并且它总是返回一个promise,而await表示需要等待promise对象返回结果,然后再继续执行后面的代码。 如何使用async/await 在使…

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