Carduelis
@Carduelis
Web-developer, front-end, js, less

Как удобно работать с json через jquery?

Есть довольно-таки нетривиальный json-файл. С массивами в том числе.
Нужно из этого json-файла сделать dom-дерево с данными и "айдишниками". Да, можно использовать какой-нибудь ангуляр или просто шаблонизатор и написать что-то вроде
<ul ng-repeat="{corpus.levels.room}">
<li>{corpus.levels.room.user}</li>
</ul>


Но в конкретном случае есть только jQuery и отсутствие шаблонизатора. Как сделать попроще вот этот кусок кода:

$.getJSON( "js/data.json", function( data ) {
  var items = [];
  $.each( data, function( corpus, val ) {
    $('body').append('<section class="json" data-corpus='+corpus+'>');
    $.each( data[corpus], function( key2, val2 ) {
      //console.log(key2 + ' - ' + val2);
      var section = $('section.json[data-corpus="'+corpus+'"]');
      section.append('<div class="'+key2+'-'+corpus+'">Корпус '+val2+'</div>')
      $.each( data[corpus].levels, function( key3, val3 ) {
        //console.log(key3 + ' - ' + val3);
        level = section.find('.levels-'+key3);
        $.each( data[corpus].levels[key3], function( key4, val4 ) {
            level.append('<div class="'+key4+'">'+val4+'</div>');
            $.each( data[corpus].levels[key3].rooms, function( key5, val5 ) {
                var rooms = level.find('.rooms');
                rooms.append('<div class="room" data-roomId="'+key5+'">');
                $.each( data[corpus].levels[key3].rooms[key5], function( key6, val6 ) {
                    var room = rooms.find('.room[data-roomid="'+key5+'"]');
                    room.append('<div class="'+key6+'">'+val6+'</div>');
                });
            });
        });
      });
    });
  });
  • Вопрос задан
  • 364 просмотра
Пригласить эксперта
Ответы на вопрос 1
@NicoBurno
Разработчик-прокрастинатор
Я вряд ли решу на ваш вопрос. Но:
Почему-бы вам не использовать XML? Вы в нем можете писать и HTML-теги. Ненужные можете просто пометить каким-нибудь классом, и удалить их перед вставкой в конечный документ...

По крайней мере я бы сделал так, если бы мог повлиять на входные данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы