0

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

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。

如果有人能帮我解决这个问题,那就太棒了:)

4

3 回答 3

4

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 演示

于 2013-05-15T13:13:36.373 回答
0

没有 JSON 对象。JSON 是一种格式化数据的方式。您正试图通过一个普通的 javascript 对象。您可以在这里查看第一个答案

于 2013-05-15T13:00:53.870 回答
0

JSON 是多数组,我们可以使用 data[a][b]... 来获取它。 在此处输入图像描述

function xmlhttprequest(url) {
 var xhr = new XMLHttpRequest();
 xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
   if (xhr.status == 200) {
    var data = JSON.parse(xhr.responseText);
    console.log(data);
    for(var a in data){
     document.write(a+':<br>');
     for(var b in data[a]){
      document.write('&nbsp;&nbsp;&nbsp;'+b+':<br>');
      for(var c in data[a][b]){
       document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+c+"="+data[a][b][c]+'<br>');
      }
     }
     document.write('<br>');
    }           
   }else{
    alert(url+'\n错误');
   }
  }
 }
 xhr.open('GET', url, false);
 xhr.send();
};
xmlhttprequest('https://api.shuax.com/tools/getchrome/json');
于 2016-05-12T02:52:20.430 回答