2012-07-13 77 views
5

服務器以JSON形式返回對象數組。它看起來是這樣的:對象數組的JSON.parse

{"d":"[ 
    {\"Id\":1,\"IsGood\":true,\"name1\":\"name1dsres\",\"Name2\":\"name2fdsfd\",\"name3\": \"name3fdsgfd\",\"wasBorn\":\"\\/Date(284011000000)\\/\"}, 
    {\"Id\":2,\"IsGood\":false,\"name1\":\"fdsfds\",\"name2\":\"gfd3im543\",\"name3\":\"3543gfdgfd\",\"WasBorned\":\"\\/Date(281486800000)\\/\"} 
]"} 

我需要使用JSON.parse函數進行解析。我這樣做是這樣的:

function myFunction(dataFromServer){ 
     var parsedJSON = JSON.parse(dataFromServer.d); 
     for (var item in parsedJSON.d) { 
      // how do I get the fields of current item? 
     } 

此代碼不能正常工作,它返回undefined

for (var item in parsedJSON) { 
     alert(item.Id); 
} 
+0

和什麼你的問題 ?? – Jashwant 2012-07-13 10:38:33

+0

假設'dataFromServer'包含您發佈的數據並且已經解析了它,那麼'parsedJSON'已經是一個數組,它沒有屬性'd'。如果你想知道如何訪問對象的屬性,請查看https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects – 2012-07-13 10:38:36

+1

關於你的更新:這不是你如何遍歷數組。看看下面的鏈接來理解'for ... in':https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in。使用普通的'for'循環遍歷數組。 – 2012-07-13 10:43:07

回答

6

這工作完全

function myFunction(dataFromServer){ 
     var parsedJSON = JSON.parse(dataFromServer.d); 
     for (var i=0;i<parsedJSON.length;i++) { 
      alert(parsedJSON[i].Id); 
     } 
} 

但這好好嘗試一下

function myFunction(dataFromServer){ 
      var parsedJSON = JSON.parse(dataFromServer.d); 
      for (var item in parsedJSON) { 
       alert(item.Id); 
     } 
} 
+2

它不應該。 for-in結構用於遍歷對象屬性,而不是遍歷數組元素(就像您在PHP或Python中所做的那樣)。 JS需要一個增量for循環來迭代數組。 – 2012-07-15 02:21:17

+0

'for(index in array){ var value = array [index]; }' – Alex 2016-10-18 10:06:22

2

你可以只訪問它們,就像任何對象:

var id = item.Id; 
if (item.IsGood) { ... } 

如果你想列舉他們使用某種方式,看看this SO question

0

你做oridinary JavaScript對象,您可以訪問它們, 要麼是作爲item.iditem['id']

+0

我該怎麼做? – 2012-07-13 10:50:42

+0

在循環內(它應該是一個正常的for循環,不是每個循環),在你寫問題的地方,你得到這個對象,只需使用點符號或者像地圖一樣訪問它即可。但是@Rab Nawas注意到d的值不是一個數組,而是一個數組的字符串。這意味着在訪問數組中的元素之前,必須將其解析爲JSON對象。 – 2012-07-13 11:42:21