如何使用javascript中的for循环解析此json中的每个值

时间:2013-04-11 12:15:28

标签: javascript json

我想如何使用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);   
    }
}

2 个答案:

答案 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 );

根据您的实际需要,您可能希望保留密钥或在其他某些位置使用回调。但一般的方法看起来应该类似。