jQuery JSON looping through nested objects

前端 未结 2 1165
说谎
说谎 2020-11-29 12:40

I currently have this:

    $.getJSON(\'test.json\', function(data) {
      var items = [];

      $.each(data, function(key, val) {
        items.push(\'<         


        
相关标签:
2条回答
  • 2020-11-29 13:07

    You can make a recursive loop function, but you'd have a problem: when a property is an object, there is no text to display because there is no string. So, you'll end up with:

    - - value11
      - value12
    - value2
    - value3
    

    because while value2 is the string to display for item #2, it is an object that's displayed for item #1.

    Anyway, this is what I made up: http://jsfiddle.net/uXww2/.

    // obj is the object to loop, ul is the ul to append lis to
    function loop(obj, ul) {
        $.each(obj, function(key, val) {
            if(val && typeof val === "object") { // object, call recursively
                var ul2 = $("<ul>").appendTo(
                    $("<li>").appendTo(ul)
                );
    
                loop(val, ul2);
            } else {
                $("<li>", {
                    id: key
                }).text(val).appendTo(ul);
            }
        });
    }
    
    $.getJSON('test.json', function(data) {
      var ul = $("<ul>");
    
      loop(data, ul);
    
      ul.addClass("my-new-list").appendTo('body');
    });
    
    0 讨论(0)
  • 2020-11-29 13:21

    so, what you want is a treeview looping through a json object

    you can use this code i made myself recursively, test it ;)

    var treestring      = "";
    var myid            = "arv";
    var json_object     = {your json}; 
    
    var Tree = function (data) {
       this.data = data;
    };
    
    //1st step
    Tree.renderTree(json_object, myid);
    
    //2st step , this is a function
    Tree.renderTree= function (json_object, myid) {
        $.each(json_object, function (key, val) {
            var m = new Tree(val);
            m.render(myid);
        });       
    }
    
    //3st step, this a function too
    Tree.prototype.render = function (myid) {
        treestring = "<li class='category'> " + this.data.Name;
        //Check if has another arrays inside the current
        if (this.data.SubFolders) {
            treestring += "<ul id=" + this.data.ID + "</ul>";
            $("#" + myid).append(treestring);
            myid = this.data.ID;
            Tree.renderTree(this.data.Sub_Fodlers, myid);
        }
        else {
            treestring += "</li>";
            $("#" + myid).append(treestring);
        }
    };
    
    
    //HTML
    <div id="tree"> 
         <ul id="arv"></ul>
    </div>
    

    //this.data.{something} ate the fields defined in your json object

    enjoy ;)

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