2013-04-11 22 views
0

我想我們如何解析這樣的json使用javacsript直到使用for循環的最後一個元素,我已經完成了這個,但我得到的結果是[對象,對象],[對象,在第一LART對象]和在第二2和如何能JSON數組如何解析此json中的每個值使用for循環在javascript中

[ 
    { 
     "location": [ 
      { 
       "building": [ 
        "Default Building" 
       ], 
       "name": "Default Location" 
      } 
     ], 
     "name": "Default Organization" 
    }, 
    { 
     "location": [ 
      { 
       "building": [ 
        "test_loc1_building1", 
        "test_loc1_building2" 
       ], 
       "name": "test location1" 
      }, 
      { 
       "building": [ 
        "test_loc2_building2" 
       ], 
       "name": "test location2" 
      } 
     ], 
     "name": "test Organization" 
    } 
] 

代碼我已經在提醒的每一個值在第三[對象,對象]工作是

function orgname() 
{ 
    var json = <?php echo $response ?>; 
    alert(json); 
    alert(json.length); 
    for(var i=0; i<json.length; i++) 
    { 
     var item = json[i]; 
     alert(item); 
    } 
} 
+1

你確定它是JSON(即未解析)嗎?它看起來像腳本的純JS對象。 – 2013-04-11 12:16:28

+0

您似乎警告正確的值。如果您想更好地看到它們,請使用'console.log'而不是'alert'。 – 2013-04-11 12:18:28

+0

我已經使用控制檯和基金會,我通過JSON本身形式鉻瀏覽器 – dscxz 2013-04-11 12:19:45

回答

0

你的JSON對象很奇怪。有點格式化後,你的JSON看起來像:

[ 
    { 
     "location" : 
      [ 
       { 
        "building" : [ "Default Building" ], 
        "name" : "Default Location" 
       } 
      ], 
     "name" : "Default Organization" 
    }, 
    { 
     "location" : 
      [ 
       { 
        "building" : [ "test_loc1_building1", "test_loc1_building2" ], 
        "name" : "test location1" 
       }, 
       { 
        "building" : [ "test_loc2_building2" ], 
        "name" : "test location2" 
       } 
      ], 
     "name" : "test Organization" 
    } 
]; 

只有兩個外數組中的對象(位置嗎?)。其中,第二個對象包含兩個建築物。您將需要一個雙重嵌套循環或遞歸遍歷所有建築物。

for (var i=0; i<json.length; i++) 
{ 
    var item = json[i]; 
    for (var j = 0; j < item.location.length; j++) 
    { 
     var loc = item.location[j]; 
     // do stuff here with item and/or loc. 
    } 
} 
0

從你的代碼我判斷,你直接插入這個JavaScript對象。我假設,您已經在生成$response時使用了json_encode()

要真正遍歷整個對象,然後,我建議這樣的遞歸方法:

var json = <?php echo $response; ?>; 

function traverse(obj, cb) { 
    if(Array.isArray(obj)) { 
    // array in here 
    for(var i=0; i<obj.length; i++) { 
     traverse(obj[i], cb); 
    } 
    } else if (typeof obj == 'Object' { 
    // object in here 
    for(var i in obj) { 
     if(obj.hasOwnProperty(i)) { 
     traverse(obj[i], cb); 
     } 
    } 
    } else { 
    // literal value in here 
    cb(obj); 
    } 

} 

traverse(json, alert); 

根據您的實際需要您可能希望保留鍵或使用回調在一些其他的點。但一般的方法應該看起來很相似。