Değerleri çapraz json Traverse Sorun, mümkün değil

1 Cevap php

Ben ajax çağrısından altında getiri alıyorum ama yardım lütfen bunu kastetmek için mümkün değil, lütfen.

{
    "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 Cevap

Çok kolayca yapabilirsiniz:

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

Ama JSON nesne yapısı çeşitli nedenlerden dolayı iyi değil:

  • It does not reflect the structure of the actual data
    With this I mean, that you actually have an array of objects. But in your JSON object the elements of the array are represented as properties of an object.

  • You have invalid JavaScript object property names.
    Properties for objects in JavaScript are not allowed to start with numbers. But with msg = { "1": {...}} you have a number as property.
    Fortunately it is not that bad because you can access this property with "array like" access msg["1"] (instead of the "normal way", msg.1). But I would consider this as bad practice and avoid this as much as possible.


Matthew zaten önerdiği gibi Dolayısıyla, bu dizinin on the server side, before istemciye gönderilen gelen count girişi kaldırmak için daha iyi olurdu. Yani Eğer bir JSON dizi almalısınız:

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

Eğer msg.length ile dizinin uzunluğunu alabilir ve sizinle dizi hareket gibi count gerekmez:

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