首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JSON数据生成无序列表?

问从JSON数据生成无序列表?
EN

Stack Overflow用户
提问于 2011-07-14 11:37:59
回答 3查看 19.6K关注 0票数 12

我想要生成JSON数据的树视图。因此,最好将JSON数据解析为多级(!)无序的HTML列表。我发现了一些插件,但我无法让它们处理我的JSON数据。

很好的解决方案是调用函数并将json数据作为参数传递。结果可能是一个多层次的无序列表。我假设函数必须遍历所有JSON数据,并编写、ul、和li标记。

有直截了当的方法吗?

蒂娅!

PS:示例树(使用我的JSOn数据):http://braincast.nl/samples/jsoneditor/ http://www.thomasfrank.se/downloadableJS/JSONeditor_example.html

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-14 13:18:57

下面是一个简单的简单例子:

代码语言:javascript
复制
function tree(data) {    
    if (typeof(data) == 'object') {
        document.write('<ul>');
        for (var i in data) {
            document.write('<li>' + i);
            tree(data[i]);            
        }
        document.write('</ul>');
    } else {
        document.write(' => ' + data);
    }
}

jQuery版本:

代码语言:javascript
复制
function tree(data) {    
    if (typeof(data) == 'object') {        
        var ul = $('<ul>');
        for (var i in data) {            
            ul.append($('<li>').text(i).append(tree(data[i])));         
        }        
        return ul;
    } else {       
        var textNode = document.createTextNode(' => ' + data);
        return textNode;
    }
}

$(document.body).append(tree(data));
票数 19
EN

Stack Overflow用户

发布于 2013-11-22 01:02:11

这里是一个完整的纯javascript解决方案。递归遍历JSON对象,并在执行过程中构造ul和li。不过,最好不要一次只向DOM添加元素。

HTML

代码语言:javascript
复制
 <ul id="JSONunorderedList"></ul> 

JAVASCRIPT

代码语言:javascript
复制
var jsonObj ={"labels":[ {"labelFont":"35pt Calibri","labelLocation":{"x":0.1483, "y":0.75},  "labelText":"fluffer"},{"labelFont":"35pt Calibri","labelLocation":{"x":0.666, "y":0.666},  "labelText":"nutter"}]}; //some json to display

var listEl =document.getElementById('JSONunorderedList');
makeList(jsonObj,listEl);

function makeList( jsonObject, listElement){
    for(var i in jsonObject){//iterate through the array or object
        //insert the next child into the list as a <li>
        var newLI = document.createElement('li');
        if  (jsonObject[i] instanceof Array){
            newLI.innerHTML=i+": ARRAY";
            newLI.className="arrayOrObject"; //add a class tag so we can style differently
        }
        else if (  jsonObject[i] instanceof Object){
            newLI.innerHTML=i+": OBJECT";
            newLI.className="arrayOrObject"; //add a class tag so we can style differently
        }
        else
            newLI.innerHTML=i+': '+jsonObject[i];
        listElement.appendChild(newLI);   
        //insert a <ul> for nested nodes 
        if  (jsonObject[i] instanceof Array || jsonObject[i] instanceof Object){
            var newUL = document.createElement('ul');
            //newUL.innerHTML=i;
            listElement.appendChild(newUL);
            makeList(jsonObject[i],newUL);
        }
    }
}

das小提琴http://jsfiddle.net/honkskillet/LvMnG/

票数 1
EN

Stack Overflow用户

发布于 2011-07-14 11:40:50

你试过使用PHP和json_decode();吗?

http://php.net/manual/en/function.json-decode.php

这将在PHP中将JSON字符串作为数组返回,然后可以遍历该数组来创建UL > LI列表。

只是个主意..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6692538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档