Итерация по ответу JSON для получения ключей и значений из массива / объекта

Я пытаюсь перебрать список IndustryIdentifiers и сохранить значения типа и идентификатора.

Я попытался использовать следующий код, но я получаю неопределенное в качестве вывода.

var url = "https://www.googleapis.com/books/v1/volumes/EXiMZwEACAAJ";
        $.getJSON(url, function(data) {
                var bookID = data.items[0].id;
                var title = data.items[0].volumeInfo.title;
                var industryIdentifiers = data.items[0].volumeInfo.industryIdentifiers;
                $.each(industryIdentifiers, function(result){
                    var idType = result.type;
                    var idValue = result.identifier;
                    alert (idType + " = " + idValue);
                });
        });

3 ответа

Решение

Это потому, что вы неправильно используете $.each, $.each имеет следующую структуру обратного вызова,

Перезвоните

Type: Function( String propertyName, Object valueOfProperty )
The function that will be executed on every object.

Итак, просто используя,

 $.each(industryIdentifiers, function(result){

выдаст результат в виде индекса вместо вашего искомого значения. Таким образом, давая вам undefined ценности.

Вот рабочий код,

var url = "https://www.googleapis.com/books/v1/volumes/EXiMZwEACAAJ";
        $.getJSON(url, function(data) {
                var bookID = data.id;
                var title = data.volumeInfo.title;
                var industryIdentifiers =       data.volumeInfo.industryIdentifiers;
                $.each(industryIdentifiers, function(index,value){
                    var idType = value.type;
                    var idValue = value.identifier;
                    alert (idType + " = " + idValue);
                });
        });

И вы можете посмотреть демо здесь.

И, кроме того, вы неправильно получаете доступ к результату JSON. Так как он возвращает единственное значение, вы можете получить к нему прямой доступ как data.id,

Попробуйте этот код...

 $(document).ready( function() {
  var url = "https://www.googleapis.com/books/v1/volumes/EXiMZwEACAAJ";
        $.getJSON(url).done(function( data ){
                var bookID = data.id;
                var title = data.volumeInfo.title;
                var industryIdentifiers = data.volumeInfo.industryIdentifiers;
                //console.log(industryIdentifiers);
                $.each(industryIdentifiers, function(i, item){
                    console.log(item);
                    var idType = item.type;
                    var idValue = item.identifier;
                    alert (idType + " = " + idValue);
                });
        });
 });

Скрипка: http://jsfiddle.net/mohitk117/v5cornfb/

У тебя две проблемы. Первая проблема заключается в том, что data.items не определен, для доступа к свойствам в этом объекте данных вы должны сделать это data.nameOfProperty. Ваша вторая проблема заключается в том, что когда вы выполняете итерацию по IndustryIdentifiers, вы должны объявить второй аргумент анонимной функции в вызове $.each. Поскольку первый аргумент является только индексом массива, а второй аргумент является значением элемента, в этом случае это будет объект, обладающий свойствами типа и идентификатора.

Другие вопросы по тегам