我想如何使用javacsript解析这样的json直到最后一个使用for循环的元素我已经完成了这个但是我得到的结果是[对象,对象],[对象,对象]在第一个第二个是lart和2,第三个是[object,object],如何警告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"
}
]
我一直在工作的代码是
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);
}
}
答案 0 :(得分: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.
}
}
答案 1 :(得分:0)
从你的代码我判断,你直接将它作为JavaScript对象插入。我假设您已在json_encode()
的生成中使用了$response
。
为了实际遍历整个对象,我建议采用这样的递归方法:
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 );
根据您的实际需要,您可能希望保留密钥或在其他某些位置使用回调。但一般的方法看起来应该类似。