json对象内部数组内的JSON对象:访问特定元素

时间:2015-05-01 05:16:02

标签: javascript jquery arrays json

我正在查看ajax响应,它包含一个大型json对象,其中包含一个数组,其中包含如下所示的json数据:

"chat": {
    "chat": [
         {
        "chat_type": 0,
        "chat_id": 445473683,
        "chat_name": "system",
        etc,
        etc,
        "chat_talk": "Chat+messages+here"
        },
        {
        //Another chat message
        }

    ]
}

聊天数组中有几十个json条目,它们似乎只有1个元素。有一些“chat_types”0,1和2.现在,我想要做的是只选择类型为2的聊天项,而不要将系统作为“chat_name”。

但是对象中数组中的整个对象会让我感到困惑。我该如何做到这一点?

编辑:目前为止的代码 -

function modChat (clickEvent) {
var chatHistory = [];
var extraData = '{"planet_id":"6_300_6","item_config_version":"' + getChatTimeStamp() + '","count":20,"tick":"-1","language":"en"}';

//$("#chatBody").html(extraData);

runRequest(extraData, gameDataURL, function(response) {

    var results = [];
    var chats = JSON.stringify(response.chat.chat);
    for (var i = 0; i < chats.length; i++) {
        if (chats[i].chat_type == 2 && chats[i].chat_name != "system") {
            results.push(chats[i]);
        }
    }

    $("#chatBody").val(chats);

});//End postRequest

}

2 个答案:

答案 0 :(得分:3)

嵌套对象和数组不应该混淆。一次只做一级。要访问媒体资源,请使用.propname;要访问数组元素,请使用[index]。当它们嵌套时,你只需追加它们,这样就可以json_obj.chat.chat[index]得到双嵌套数组的元素。

如果您要重复访问嵌套对象,可以使用变量来简化它。

其余的只是一个简单的for循环。

var results = [];
var chats = json_obj.chat.chat;
for (var i = 0; i < chats.length; i++) {
    if (chats[i].chat_type == 0 && chats[i].chat_name != "system") {
        results.push(chats[i]);
    }
}

答案 1 :(得分:2)

使用Array.prototype.filter

var obj = {
    "chat": {
        "chat": [{
            "chat_type": 0,
                "chat_id": 445473683,
                "chat_name": "system",
                "chat_talk": "Chat+messages+here"
        }, {
            "chat_type": 2,
                "chat_id": 445473683,
                "chat_name": "system",
                "chat_talk": "Chat+messages+here"
        }, {
            "chat_type": 2,
                "chat_id": 445473683,
                "chat_name": "system1",
                "chat_talk": "Chat+messages+here"
        }]
    }
};

var res = obj.chat.chat.filter(function (item) {
    return item.chat_type == 2 && item.chat_name != 'system'
});

console.log(res);

JSFIDDLE