我正在查看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
}
答案 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)
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);