javascript - 使用嵌套 JSON 响应创建 HTML 列表(具有未定义的 Json 索引级别)?

标签 javascript jquery html json

我是 jquery/Javascript 新手,在将 json 响应转换为 HTML 列表时卡住了,在 Json 响应中,对象内部存在高达未定义级别的对象,如果您有任何想法,请帮助我,

JSON 响应

[
{
Id: 0,
expanded: false,
Name: "Libraries",
ParentID: -1,
children: [
{
Id: 1,
expanded: false,
Name: "Image",
ParentID: 0,
children: [
{
Id: 4,
expanded: false,
Name: "JPEG",
ParentID: 1,
children: [ ]
}
]
},
{
Id: 2,
expanded: false,
Name: "Video",
ParentID: 0,
children: [
{
Id: 8,
expanded: false,
Name: "MP4",
ParentID: 2,
children: [
{
Id: 13,
expanded: false,
Name: "Sample.mp4",
ParentID: 8,
children: [
{
Id: 15,
expanded: false,
Name: "New Hit Video",
ParentID: 13,
children: [ ]
}
]
}
]
}
]
}
]
}
]

所需的 Html 输出

<ul>Libraries
<li>Image
<ul>
<li>JPEG</li>
</ul>
</li>

<li>Video
<ul>
<li>MP4
<ul>
<li>Sample.mp4
<ul>
<li>New Hit Video
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>

Sample Output

我的尝试代码:

$(document).ready(function(){
var json='
[{"Id":0,"expanded":false,"Name":"Libraries","ParentID":-1,"children":[{"Id":1,"expanded":false,"Name":"Image","ParentID":0,"children":[{"Id":4,"expanded":false,"Name":"JPEG","ParentID":1,"children":[]}]},{"Id":2,"expanded":false,"Name":"Video","ParentID":0,"children":[{"Id":8,"expanded":false,"Name":"MP4","ParentID":2,"children":[{"Id":13,"expanded":false,"Name":"Sample.mp4","ParentID":8,"children":[{"Id":15,"expanded":false,"Name":"New Hit Video","ParentID":13,"children":[]}]}]}]}]}]';
var obj=$.parseJSON(json);
// var a=0;
$.each(obj, traversal);
function traversal(key, value) {
  if(value.Name!=null && value.ParentID!=-1 )
  {
   $('body').append('<ul name='+value.Name+' id='+value.Id+' parentID='+value.ParentID+'><a href="#" id='+value.Id+'>'+value.Name+'</a></ul>')
  }
    if (value !== null && typeof value === "object") {
        $.each(value, traversal);
    }
}
})

最佳答案

经过一番搜索,我找到了答案......有效

 <script type="text/javascript">
    function parseNodes(nodes) { // takes a nodes array and turns it into a <ol>
        var ol = document.createElement("OL");
        for(var i=0; i<nodes.length; i++) {
            ol.appendChild(parseNode(nodes[i]));
        }
        return ol;
    }

    function parseNode(node) { // takes a node object and turns it into a <li>
        var li = document.createElement("LI");
        li.innerHTML = '<a href="#">'+node.Name+'';
        li.className = node.Id;
        if(node.children) li.appendChild(parseNodes(node.children));
        return li;
    }

    window.jsonData =[
    {
        "Id": 0,
        "expanded": false,
        "Name": "Libraries",
        "ParentID": -1,
        "children": [
            {
                "Id": 1,
                "expanded": false,
                "Name": "Image",
                "ParentID": 0,
                "children": [
                    {
                        "Id": 4,
                        "expanded": false,
                        "Name": "JPEG",
                        "ParentID": 1,
                        "children": []
                    }
                ]
            },
            {
                "Id": 2,
                "expanded": false,
                "Name": "Video",
                "ParentID": 0,
                "children": [
                    {
                        "Id": 8,
                        "expanded": false,
                        "Name": "MP4",
                        "ParentID": 2,
                        "children": [
                            {
                                "Id": 13,
                                "expanded": false,
                                "Name": "Sample.mp4",
                                "ParentID": 8,
                                "children": [
                                    {
                                        "Id": 15,
                                        "expanded": false,
                                        "Name": "New Hit Video",
                                        "ParentID": 13,
                                        "children": []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
];

    </script>

关于javascript - 使用嵌套 JSON 响应创建 HTML 列表(具有未定义的 Json 索引级别)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046902/

相关文章:

javascript - 如何构建 sails.js 离线文档?

javascript - 是否有可能在浏览器中发现类型化数组分配限制?

javascript - 在 Canvas 中渲染粒子,提高 FireFox FPS

javascript - 如何验证输入是否被选中以及如何显示它的编号

html - 如何用css格式化输入框中的文本

javascript - 使用 Puppeteer 和 Node 从 DOM 中选择元素

javascript - 如何将此字符串 "07/10/2017 18:30 PM"转换为 JavaScript 日期类型

php - 如何使用复选框在获取的表上切换只读属性?

jquery - 为什么我的段落总是在我的按钮后面?

java - 如何从多个本地网站提取信息?