2013-04-11 21 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); 

根据您的实际需要您可能希望保留键或使用回调在一些其他的点。但一般的方法应该看起来很相似。