Json Traverse问题,无法遍历值

时间:2010-06-03 06:58:47

标签: php javascript json

我从ajax调用得到以下返回但是无法遍历它请求帮助。

{
    "1": {
        "tel1": null, 
        "status": "1", 
        "fax": "",     
        "tel2": null,  
        "name": "sh_sup1", 
        "country": "Anguilla", 
        "creation_time": "2010-06-02 14:09:40",
        "created_by": "0",
        "Id": "85",
        "fk_location_id": "3893",
        "address": "Noida",
        "email": "sh_sup1@shell.com",
        "website_url": "http://www.noida.in",
        "srk_main_id": "0"
    },
    "0": {
        "tel1": "Ahemdabad",
        "status": "1",
        "fax": "",
        "tel2": "Gujrat",
        "name": "Bharat Petro",
        "country": "India",
        "creation_time": "2010-05-31 15:36:53",
        "created_by": "0",
        "Id": "82",
        "fk_location_id": "3874",
        "address": "THIS is test address",
        "email": "bp@india.com",
        "website_url": "http://www.bp.com",
        "srk_main_id": "0"
    },
    "count": 2
}

1 个答案:

答案 0 :(得分:2)

你可以很容易地做到:

for(i = 0; i < msg.count; i++) {
   alert(msg[i]['name']);
} 

但是由于以下几个原因,JSON对象的结构并不好:

  • 它不反映实际数据的结构
    我的意思是,你实际上有一个数组的对象。但是在您的JSON对象中,数组的元素表示为对象的属性

  • 您的JavaScript对象属性名称无效 JavaScript中对象的属性不允许以数字开头。但是对于msg = { "1": {...}},您有一个数字作为属性 幸运的是,它并不是那么糟糕,因为您可以使用“数组类似”访问msg["1"](而不是“正常方式”,msg.1)来访问此属性。但我认为这是不好的做法,尽可能避免这种情况。


因此,正如Matthew已经提出的那样,最好从服务器端的数组中移除count条目, 之前将 客户端。即你应该得到一个JSON数组:

[{
     "tel1": "Ahemdabad",
     "status": "1",
     // etc.
 },
 {    
     "tel1": null,
     "status": "1",
     // etc.
 }]

您不需要count,因为您可以使用msg.length获取数组的长度,并且可以使用以下代码遍历数组:

for(var i in msg) {
    alert(msg[i].name);
}