0

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

4 回答 4

1

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

于 2012-07-20T11:08:12.183 回答
1

如果我想更改数据,我会使用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.
于 2012-07-20T11:13:26.453 回答
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

ETC

于 2012-07-20T11:13:51.650 回答
-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/

于 2012-07-20T11:10:59.793 回答