0

我想我们如何使用 javacsript 解析这样的 json,直到使用 for 循环的最后一个元素我已经完成了这个,但是我在第一个 lart 和 2 中得到的结果是 [object,object],[object,object]在第二个和第三个中的 [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);   
    }
}
4

2 回答 2

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

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

于 2013-04-11T12:25:22.460 回答
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.
    }
}
于 2013-04-11T12:21:56.447 回答