2016-05-21 2 views
-1

Как получить доступ к ключу и значениям этого объекта?Обработка многомерного массива json

{ 
    "chat_data": { 
    "nickname": "somevalue", 
    "items": { 
     "FncZ9Q": [{ 
      "key1": "value1", 
      "key2": "value2", 
      "key3": "value3", 
      "key4": "value4", 
      "key5": "value5" 
     }, { 
      "key1": "value1", 
      "key2": "value2", 
      "key3": "value3", 
      "key4": "value4", 
      "key5": "value5" 
     }, { 
      "key1": "value1", 
      "key2": "value2", 
      "key3": "value3", 
      "key4": "value4", 
      "key5": "value5" 
     }], 
     "GYDjsA": [{ 
      "key1": "value1", 
      "key2": "value2", 
      "key3": "value3", 
      "key4": "value4", 
      "key5": "value5" 
     }, { 
      "key1": "value1", 
      "key2": "value2", 
      "key3": "value3", 
      "key4": "value4", 
      "key5": "value5" 
     }] 
    } 
    } 
} 

Я пробовал некоторые методы, но я не знаю, как решить эту проблему самостоятельно. Вот мой вызов ajax, где данные должны управляться.

$.ajax({ 
    url: "/dataUrl", 
    type: "post", 
    cache: false, 
    dataType: 'json', 
    success: function (data) { 
     for (var key in data.chat_data.items) { 
      var obj = data.chat_data.items[key]; 
      $.each(data.chat_data.items, function (i, value) { 
       console.log('Value of ' + i + ' is : ' + value); 
      }) 
      // ... 
     } 
    } 
}); 

Надеюсь, кто-то может мне помочь. С уважением Sascha

ответ

3

Петля. Loop. И петлю еще раз.

var data = JSON.parse('{"chat_data":{"nickname":"somevalue","items":{"FncZ9Q":[{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"},{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"},{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"}],"GYDjsA":[{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"},{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"}]}}}'); 
 

 
for (var key in data.chat_data.items) { 
 
    var obj = data.chat_data.items[key]; 
 
    log('Item "' + key + '":'); 
 
    for (var index in obj) { 
 
     var obj2 = obj[index], list = []; 
 
     for (var prop in obj2) { 
 
      list.push('"' + prop + '": "' + obj2[prop] + '"'); 
 
     } 
 
     log(' Object at index ' + index + '=> ' + list.join(', ')); 
 
    } 
 
} 
 

 
function log(txt){ document.body.innerHTML += '<pre>' + txt + '</pre>'; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Хорошо, это работает, но как я могу получить свойство и значения Obj2 в одной строке? –

+0

Я создал некоторые переменные в Last for Loop, но каждый раз, когда переменные пустые –

+0

@SaschaHeim Я изменил свой ответ, чтобы вывести их в одну строку. Если он по-прежнему не работает для вас, создайте [jsfiddle] (https://jsfiddle.net/) или [pastebin] (http://pastebin.com/), чтобы я мог посмотреть на него. – blex

2

Вы должны использовать три вложенных цикла, как это:

for (const i in data.chat_data.items) { 
    for (const j of data.chat_data.items[i]) { 
    for (const key in j) { 
     const value = j[key] 
     console.log(key, value) 
    } 
    } 
} 
+0

Мы довольно много имеют один и тот же ответ (так, +1), но я бы хотел спросить: зачем использовать '' const' где var' также будет работать? 'const' все еще довольно новый и не поддерживается везде (например: IE10). – blex

+0

@blex Использование 'const' вместо' var' предотвращает случайную переписку переменной. Это правда, что он не поддерживается повсюду, но вы можете использовать Babel для компиляции кода ES6 в ES5. –

+0

О, хорошо, я вижу, где это было бы полезно ('for (const i in arr) {setTimeout (foo, 10 * i);}') – blex

0

вы пробовали underscorejs легко установить и использовать

_.allKeys(object) 

Получить все имена объектов собственного и унаследованные свойства.

надеюсь, что это поможет

+0

Могу ли я получить значения с помощью этого метода? –

+0

Этот метод используется только для получения ключей, но если вы проверите ссылку, вы увидите множество функций для коллекций и объектов. Я использовал много раз, и я говорю вам, подчеркивание сделает вашу жизнь лучше –

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