Generate unordered list from JSON Data?

后端 未结 3 2076
予麋鹿
予麋鹿 2020-12-08 11:53

I\'d like to generate a tree view of my JSON data. Therefore it would be nice to parse the JSON data into a multi-level (!) unordered HTML list

相关标签:
3条回答
  • 2020-12-08 12:24

    Have you tried using PHP and json_decode();

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

    This would return your JSON string as an array in PHP and you can then loop through the array to create your UL > LI list.

    Just an idea..

    0 讨论(0)
  • 2020-12-08 12:32

    Just a quick simple example:

    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 version:

    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));
    
    0 讨论(0)
  • 2020-12-08 12:45

    Here is a complete pure javascript solution. Recursive traverse the JSON object and construct you ul and li's as you go. It's better for not to add elements to the DOM one at a time, though.

    HTML

     <ul id="JSONunorderedList"></ul> 
    

    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 fiddle http://jsfiddle.net/honkskillet/LvMnG/

    0 讨论(0)
提交回复
热议问题