遍历JSON对象

时间:2012-07-20 11:04:55

标签: javascript json optimization

我从PHP页面获取的数据如下:

[{
    "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)

还有一个,我将根据这些数据创建一个表格。

4 个答案:

答案 0 :(得分:1)

我更喜欢使用http://underscorejs.org/来做这样的事情。它为对象,集合等提供了许多有用的功能。

答案 1 :(得分:1)

如果我想更改数据,我会使用jQuery's each()(或map()

我应该补充一点,你还应该创建一个返回一个对象的函数(甚至可能使用一些实用工具方法),因为你的数据现在对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.

答案 2 :(得分:0)

如果您收到的数据没有变化,只需解析对象并使用您需要的密钥即可。 我所知道的所有浏览器都有一个名为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

答案 3 :(得分:-1)

您可以在javascript对象中转换json字符串,然后像这样访问对象:

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/