2012-03-29 5 views
0

Я сделал несколько поисков, но мне не удалось в полной мере понять, как это делается. Я относительно новичок в jQuery и JSON. В принципе, у меня есть массивный документ JSON, с которым я подключаюсь и отображаю различные данные. Данные, которые мне нужны, - это метка поставщика, которая вложена на три уровня вниз, и я не уверен, как ее вернуть.Доступ к данным нижнего уровня в JSON

JSON

{ 
    "@order": "1", 
    "category": { 
     "@id": "204", 
     "label": "Category 1", 
     "suppliers": { 
      "supplier": { 
       "label": "Business 1", 
       "customicons": [ 
        { 
         "@id": "images/img2.jpeg", 
         "#text": "random icon" 
        } 
       ] 
      } 
     } 
     } 
    }, 

Вот скрипт, который я сделал, чтобы сформировать неупорядоченный список. Я попробовал item.category.suppliers.supplier.label, который, очевидно, не работает. Нужно ли добавлять некоторую функцию, которая выполняет итерацию через каждый уровень? Как мне добраться до этого ярлыка?

<script type="text/javascript"> 
$(document).ready(function(){ 

    $.getJSON('jsonarray.json', 
    function(data) { 

     var items = []; 

     $.each(data, function(i,item) { 

     items.push('<li id="' + item["@order"] + '"><label for="supplier"><input id="supplier" name="supplier" type="checkbox" class="checkbox"/>' + item.category.suppliers.supplier.label + '</label></li>'); 

     }); 

     $('<ul/>', { 
     'class': 'checklist-supplier cl2', 
     html: items.join('') 
     }).appendTo('.list_filter_supplier_side'); 
    }); 

}); 
</script> 

Итак, в основном вопрос заключается в том, как получить доступ к данным уровня sub в JSON с помощью jQuery? Любое разъяснение очень ценится.

+2

Если 'пункт [ "@ порядок"]' 'работы, item.category.suppliers.supplier.label' с вашим примером JSON должен работа хорошо. Попробуйте установить точку останова на строке 'items.push' и проверите каждый шаг цепи. –

+0

Пожалуйста, ознакомьтесь с https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

+0

Порядок работы отлично, если я удалю item.category.suppliers.supplier. На данный момент я получаю сообщение об ошибке «item.category.suppliers.supplier is undefined» – SeasonEnds

ответ

2

является в JSON в какой-то ответ? Если так что вы можете сделать что-то вроде этого:

var d = { 
"@order": "1", 
"category": { 
    "@id": "204", 
    "label": "Category 1", 
    "suppliers": { 
     "supplier": { 
      "label": "Business 1", 
      "customicons": [ 
       { 
        "@id": "images/img2.jpeg", 
        "#text": "random icon" 
       } 
      ] 
     } 
    } 
    } 
} 

//just show the label  
alert(d.category.suppliers.supplier.label); 

jsFiddle Example

+0

Не слишком уверен, как реализовать это в моем текущем коде. Нужно ли назначать переменную $ .getJSON ('jsonarray.json', function (data)? Как я буду использовать эту переменную, когда я прохожу через весь файл JSON? Будет ли он затем использоваться d.category.suppliers.supplier. label – SeasonEnds

+0

Как выглядит ваш полный набор данных? Вы можете прокрутить массив этих записей. Как хранятся ваши данные? – MattW

+0

Прямо сейчас, я работаю с локальным примером JSON. Я сохранил его как json-файл в том же каталоге, что и файл html. Набор данных похож на то, что я опубликовал, за исключением того, что он содержит около 100 записей. Я делаю это так, чтобы быстро имитировать его. – SeasonEnds

1

Кроме того, вы используете правильный способ доступа к данным

item.category.suppliers.supplier.label 

валидацию JSON с помощью jsonlint для подтверждения его проверки

+0

Я не был уверен, как бороться с @ в данных, так что я решил подойти к нему. Сейчас это работает, пока я не смогу решить настоящую проблему. Я ранее проверял, был ли мой json действителен в jsonlint, и он вернулся. Я получаю сообщение об ошибке item.category.suppliers.supplier undefined – SeasonEnds

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