2015-05-01 2 views
0

Я, глядя на ответ Ajax и содержит большой объект JSON, который содержит массив, который содержит данные JSON как это:JSON объект внутри массива внутри объекта JSON: Доступ конкретных элементов

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

    ] 
} 

Внутри массива чата есть десятки json-записей, которые, похоже, имеют только один элемент. Есть несколько «chat_types» 0, 1 и 2. Теперь я хочу выбрать только те записи чата, которые относятся к типу 2, и НЕ имеют систему как «имя_папки».

Но весь объект в массиве в объекте сбивает меня с толку. Как бы я это сделал?

EDIT: код до сих пор -

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

Нет такой вещи, как «объект json в массиве в объекте json». Все это _one_ json object (с вложенными массивами и структурой объектов). –

ответ

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.

+1

Мне нравится этот подход, фильтры забыты об инструменте – ABrowne

+1

Оба ответа были очень информативными! Я ценю вашу помощь. Но этот ответ немного проще, чем цикл, и сначала попытался, спасибо, ребята! –

2

Вложенные объекты и массивы не должны вводить в заблуждение. Просто делайте это на одном уровне за раз. Чтобы получить доступ к собственности, используйте .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]); 
    } 
} 
+0

Я ценю шаг за шагом, это помогает. Я настраиваю этот цикл в своем коде, и я получаю данные чата, но это givnig me chat_type 0s. Я изменил контур цикла на чаты [i] .chat_type == 2, и он все равно дает мне 0, и это меня озадачивает. Я должен указать его, давая мне оба типа 0 и 2. И система lol –

Смежные вопросы