JS循环通过json对象

时间:2013-05-15 12:49:50

标签: javascript json loops recursion titanium

我正在尝试迭代一个json对象(在javascript中)但它似乎无法正常工作...我写一个recursiv函数非常困惑,所以也许这里的一位专家可以帮助我:)

json对象:

{
  "Node": [
    {
      "Name": {
        "#text": "Folder"
      }
    },
    {
      "Name": {
        "#text": "Folder 2"
      }
    },
    {
      "Name": {
        "#text": "Folder 3"
      },
      "Nodes": {
        "Node": {
          "Name": {
            "#text": "Folder 3.1"
          },
          "Nodes": {
            "Node": [
              {
                "Name": {
                  "#text": "Folder 3.1.1"
                },
                "Nodes": {
                  "Node": {
                    "Name": {
                      "#text": "Folder 3.1.1.1"
                    }
                  }
                }
              },
              {
                "Name": {
                  "#text": "Test 2"
                }
              }
            ]
          }
        }
      }
    },
    {
      "Name": {
        "#text": "Folder 4"
      }
    }
  ]
}

我尝试解决问题

function newFolder(_data) {    
    for (var i = 0; i < _data.length; i++) {      
        if (_data[i].Nodes) {        
            Ti.API.info("Sub: "); //+ _data[i].Nodes.Node.length );
                    
            return newFolder(_data[i].Nodes.Node);      
        } else {        
            Ti.API.info("Main: " + _data[i].Name["#text"]);      
        }      
        Ti.API.info("Main: " + _data[i].Name["#text"]);    
    }  
}

问题是,函数不会像我想的那样遍历每个元素。

我已经阅读了关于jQuery的一些内容,但我对此并不十分熟悉。加上我正在使用Titanium,我不知道我是否可以使用jquery。

如果有人可以帮我解决这个问题,那会太棒了。)

3 个答案:

答案 0 :(得分:3)

Working FIDDLE Demo

我认为你的JSON非常复杂,因为没有必要。如果您有这样的对象:

var data = {
    "nodes": [
        { "name": "Folder 1" },
        { "name": "Folder 2" },
        { "name": "Folder 3" },
        {
            "name": "Folder 4",
            "nodes": [
                { "name": "Folder 4.1" },
                {
                    "name": "Folder 4.2",
                    "nodes": [
                        { "name": "Folder 4.2.1" },
                        { "name": "Folder 4.2.2" },
                        { "name": "Folder 4.2.3" }
                    ]
                },
                { "name": "Folder 4.3" }
            ]
        },
        { "name": "Folder 5" }
    ]

};

您可以通过递归函数

进行迭代
function iterateNodes(data) {
    for (var i = 0, l = data.nodes.length; i < l; i++) {
        var node = data.nodes[i];

        console.log(node.name);

        if (node.nodes) {
            arguments.callee(node);
        }
    }
}

iterateNodes(data);

检查FIDDLE Demo

答案 1 :(得分:0)

没有JSON对象的东西。 JSON是一种格式化数据的方法。您正在尝试通过一个普通的JavaScript对象。您可以在第一个答案here

中查看

答案 2 :(得分:0)

JSON是多数组,我们可以使用数据[a] [b] ...来获取它。 enter image description here

CameraUpdate