遍历JSON对象

Traversing a JSON object

本文关键字:对象 JSON 遍历      更新时间:2023-12-19

我从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)

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

如果我想更改数据,我会使用jQuery的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.

我更喜欢使用http://underscorejs.org/像这样的事情。它对对象、集合等有很多有用的功能。

如果接收的数据没有更改,只需解析对象并使用所需的键。据我所知,所有浏览器都有一个名为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

etc

您可以转换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/