2012-07-20 241 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