2012-07-20 290 views
0

這是我從PHP頁面獲取的數據是這樣的:遍歷JSON對象

[{ 
    "id": "1", 
    "name": null, 
    "startdate": "2012-07-20", 
    "starttime": "09:53:02", 
    "enddate": "2012-07-20", 
    "endtime": "09:54:10", 
    "duration": "01:00:00", 
    "feedbacks": [{ 
     "id": "1", 
     "type": "1", 
     "content": "cont" 
    }], 
    "conditions": [{ 
     "id": "1", 
     "dev_id": "1", 
     "mod_id": "2", 
     "sub_id": "3", 
     "to_be_compared_value": "1", 
     "comparison_type": "1" 
    }], 
    "actions": [{ 
     "id": "1", 
     "dev_id": "1", 
     "mod_id": "1", 
     "sub_id": "1", 
     "target_action": "1" 
    }] 
}] 

哪種方式很簡單,高效能優雅遍歷此對象嗎?我用這兩個直到這個時候。你能告訴我哪一個是我的選擇嗎?或者你可以給我一個替代方案嗎?爲什麼?我有一個正在運行的應用程序版本,現在我正在審查我自己的代碼,並且我想向你們提供一些建議。

由於提前,

方法我用之前:

$.map 
for(var i in obj) 

一多了去了,我會從這些數據創建一個表。

+0

不能JSON.parse()來使用嗎? – C5H8NNaO4 2012-07-20 11:07:19

+0

是的,解析後,我有一個對象,我可以有效地使用這個對象? – totten 2012-07-20 11:08:29

+0

取決於您想要使用它的方式?遍歷它或將函數映射到它上面都是在正確的上下文中執行的完美行爲。但是,您要如何處理這些數據呢? – 2012-07-20 11:10:05

回答

1

我會用jQuery's each()(或map()如果我想更改數據)

我要補充一點,你還應該創建它返回一個對象的函數(甚至可能與一些UTIL ity方法),因爲你的數據現在不是非常適合JS的。那些日期和時間,這些ID作爲字符串。

例子:

function cleanMyObject(object){ 
     var cleanFeedbacks = function(feedbacks){ 
      /* ... */ 
      return feedback; 
     }; 

     object.start = /* transform date and time strings to datetime object ...*/ 
     object.end = /*...*/ 

     /*...*/ 

     $.map(object.feedbacks,cleanFeedbacks); 
     /* cleanup the remaining objects... */ 

     return object; 
    } 

    $.map(receivedData, cleanMyObject); 

    // cleanMyObject() returns the modified object so $.map will clean everything in your array. 
1

我喜歡用http://underscorejs.org/這樣的東西。它有一個對象,集合等很多有用的功能

+1

我喜歡!她在這個時候在哪裏:) – totten 2012-07-20 11:22:33

-1

您可以將JSON字符串在JavaScript對象,然後像這樣訪問對象:

var obj = jQuery.parseJSON(jsonString); 
alert('Id='+obj.id); 

var feedbackList = obj.feedbacks; 
for (var i=0; i<feedbackList.length; i++) { 
    ... 
} 

參考jQuery.parseJSON:http://api.jquery.com/jQuery.parseJSON/

+0

我在評論中表示,我已經改變了這個對象。但是,謝謝你的意見。 – totten 2012-07-20 11:13:51

0

如果您recieving數據並沒有改變,只是解析對象,並使用你所需要的按鍵。 我知道所有瀏覽器都有一個叫做JSON.parse的函數來將JSON字符串轉換爲JS對象。 我想說的是:不要懶惰,如果你的對象總是提供相同的數據,那麼你就沒有從編寫「通用」函數中獲得任何好處,而且你幾乎沒有機會使用它該功能再次與不同的對象一起使用。

var myobj= JSON.parse(phpJSONstring); 
var feedbacks= myobj["feedbacks"]; 
//do something with feedbacks 
var conditions= myobj["conditions"]; 
//do something with conditions 

+0

這裏的數據不會只有一個記錄,會很多,這樣就可能會比這更大。 – totten 2012-07-20 11:15:45

+0

只是使用JSON.parse每一個,你應該沒問題。我懷疑有一個更有效的方法 – 2012-07-20 11:18:01

+0

添加一個鏈接到MDN https://developer.mozilla.org/En/Using_native_JSON/ – 2012-07-20 11:22:58