2010-06-03 247 views
-2

我從ajax調用得到下面的回報,但無法遍歷它請請幫助。Json遍歷問題,無法遍歷值

 
{ 
    "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": "[email protected]", 
     "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": "[email protected]", 
     "website_url": "http://www.bp.com", 
     "srk_main_id": "0" 
    }, 
    "count": 2 
} 
+2

我重新格式化它。您還需要告訴我們您使用的是哪種語言,需要什麼樣的遍歷以及您嘗試過的內容。另外,這是奇怪的JSON。所有的數字都是字符串,它使用帶有「0」和「1」鍵的對象而不是更自然的數組。 – 2010-06-03 07:03:32

+0

我使用php,我使用json_encode 從服務器編碼php數組,並將其返回給客戶端,現在我想遍歷這個json數據什麼即時通訊使用javascript only.Count可以刪除它只是添加數數元素的形成。請建議 – Jos 2010-06-03 07:08:44

+0

@Jos:呃...你用'json_encode'對它進行編碼......那麼爲什麼不用'json_decode'來解碼它呢?然後訪問你想要的任何變量,就像你通常使用PHP關聯數組一樣.. – mpen 2010-06-03 07:13:53

回答

2

你可以做到這一點很容易:

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); 
} 
+0

感謝所有我設法完成它,我已經改變了json的完整格式返回和hurrayyy其over.But再次感謝大聲思考我的問題。 – Jos 2010-06-03 09:20:41

+0

JavaScript和JSON對象都可以具有數字屬性名稱。這不是一個好主意,但它是有效的。 – 2010-06-04 11:41:26