Json Traverse Problem, не в состоянии пройти значения - PullRequest
0 голосов
/ 03 июня 2010

Я получаю приведенный ниже ответ от вызова 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 Ответ

2 голосов
/ 03 июня 2010

Вы можете сделать это очень легко:

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

Но структура вашего объекта JSON не так хороша по нескольким причинам:

  • Не отражает структуру фактических данных
    Под этим я подразумеваю, что на самом деле у вас есть массив объектов. Но в вашем объекте JSON элементы массива представлены как свойства объекта.

  • У вас неверные имена свойств объектов JavaScript.
    Свойства объектов в JavaScript не могут начинаться с цифр. Но с msg = { "1": {...}} у вас есть число как свойство.
    К счастью, это не так уж и плохо, потому что вы можете получить доступ к этому свойству с «массивом» доступа msg["1"] (вместо «обычного способа», msg.1). Но я бы посчитал это плохой практикой и старался избегать этого в максимально возможной степени.


Следовательно, как уже предлагает Мэтью, было бы лучше удалить запись count из массива на стороне сервера, до того, как вы отправили ее клиенту. То есть Вы должны получить массив JSON:

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

Вам не нужно count, так как вы можете получить длину массива с помощью msg.length и вы можете пройти массив с помощью:

for(var i in msg) {
    alert(msg[i].name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...