2013-05-15 216 views
0

我想迭代一個json對象(在javascript中),但它似乎並沒有正常工作......對於我來說寫一個遞歸函數非常困惑,所以也許其中一位專家在這裏可以幫助我:)JS循環通過一個json對象

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"]);     
    }   
} 

的問題是,該功能不會通過每一個元素運行,像我想要t O操作。

我已經閱讀了一些有關jQuery的內容,但是我不太熟悉這一點。再加上我使用鈦和我不知道我是否可以使用jQuery。

這將是洙真棒,如果有人能幫助我擺脫這種:)

+2

爲什麼你註釋掉了你的代碼? –

+0

其評論爲一。我會認爲這是一個錯字。一旦使用'JSON.parse'解析JSON,就可以遍歷它。現在,取決於它是什麼,你將如何循環。如果你的JSON是一個對象數組,那麼你可以使用傳統的for循環遍歷它。但是,如果它是一個對象,並且您試圖迭代對象的屬性,則必須將'for ... in'循環與'obj.hasOwnProperty'檢查結合使用。 –

+0

有[沒有這樣的事情作爲JSON對象](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。 – nnnnnn

回答

0

有沒有事,作爲一個JSON對象。 JSON是格式化數據的一種方式。您正試圖通過一個普通的JavaScript對象。你可以看一下在第一個答案here

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

+0

謝謝你 - 看起來不錯。但我真的不能修改我的JSON,因爲它來自服務器。我不知道爲什麼,但我不能讓你的例子與原始json正確運行:& –

+0

我嘗試了另一件事,但我無法實現我的目標: 包含文件夾對象的數組。每個文件夾都有一個子變量,其子文件夾被保存。孩子的財產當然也是一個數組......等等...... 背景是,我可以將當​​前文件夾保存在變量中,並非常容易地訪問孩子並顯示它們。 但我真的不知道如何做到這一點:/如果我必須,我甚至會爲真正的答案付出幾塊錢,因爲對我來說這是非常重要的,要處理這些東西,知道如​​何做這種事情:/ –

+0

@NicoBarelmann我的對象結構和你說的一樣,不是嗎? – 2013-05-18 10:22:01

0

JSON是多個數組,我們可以使用data [a] [b] ...來獲得它。 enter image description here

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');