2013-08-08 4 views
1

Я новичок в jQuery и Java-скрипте. Мне нужно, чтобы разобрать файл JSON, который имеет массивы, я использую этот код:Parse Json Array в jQuery

$.getJSON('mat.json', function(data) { 
    var items = []; 
    $.each(data, function(key, val) { 
     items.push('<li id="' + key + '">' + val + '</li>'); 
    }); 

    $('<ul/>', {'class': 'my-new-list', html: items.join('')}).appendTo('body'); 
}); 

Для этого JSON файла:

{ 
    "@file_name": "materials", 
    "materials": [{ 
     "@site_name_English": "N/A", 
     "@site_name_Spanish": "N/A", 
     "@site_number": "1", 
     "zoom": [{ 
      "@zoom_name_English": "Main Reservoir", 
      "@zoom_name_Spanish": "Depósito principal", 
      "@zoom_number": "1", 
      "icon": [ 
       { 
        "@icon_name": "Info Icon 1", 
        "@icon_pin": "1" 
       }, 
       { 
        "@icon_name": "Info Icon 2", 
        "@icon_pin": "2" 
       } 
      ] 
     }] 
    }] 
} 

Но мой результат:

materials 
[object Object] 

Как я могу изменить мой код, чтобы я мог получить объекты, когда цикл встречает их?

+0

Каковы свойства ваших объектов JSON, которые вы хотите видеть в своем лике и содержании, уважаете ively? – Raibaz

+0

Это не помешает предоставить jsFiddle ;-) –

ответ

1

Используйте это:

$.each(data, function(key, val) 
{ 
    if(typeof val === 'object') { 
     $.each(val, function(keys, value) 
     { 
     items.push('<li id="' + keys + '">' + value + '</li>'); 
     } 
    } else { 
     items.push('<li id="' + key + '">' + val + '</li>'); 
    } 
}); 

Вы должны проверить, что значение объекта или нет.

EDITED:

function checkObj(key, val, items){ 
    if(typeof val === 'object') { 
     $.each(val, function(keys, value) 
      { 
      if(typeof value === 'object') { 
       checkObj(keys, value, items); 
      } else { 
       items.push('<li id="' + keys + '">' + value + '</li>'); 
      } 
     }); 
    } 
} 

И при использовании функции в $ .each это:

$.each(data, function(key, val) 
{ 
    if(typeof val === 'object') { 
     checkObj(key, val, items); 
    } else { 
     items.push('<li id="' + key + '">' + val + '</li>'); 
    } 
}); 
+0

Это именно то, что мне нужно, но его не работает :( – Dim

+0

@DanM вам нужно создать функцию, которая будет рекурсивной функцией для чтения таких данных JSON. Я создам это для вас. –

+0

Огромное спасибо! – Dim

0

Программа показывает, как читать JSon и сохранять данные в текстовом поле

$(document).ready(function(){ 

$.getJSON("Test.json",function(data){ 

     $.each(data,function(key,value){ 
      alert(data[key].attrib1name); 
      alert(data[key].attrib2name); 
      $('input').val(data[key].enterpriseName); 
      activities=data[key].activities; 
      console.log(value); 
     }); 
    });  


});