Итерация по ответу 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);
});
});
});
У тебя две проблемы. Первая проблема заключается в том, что data.items не определен, для доступа к свойствам в этом объекте данных вы должны сделать это data.nameOfProperty. Ваша вторая проблема заключается в том, что когда вы выполняете итерацию по IndustryIdentifiers, вы должны объявить второй аргумент анонимной функции в вызове $.each. Поскольку первый аргумент является только индексом массива, а второй аргумент является значением элемента, в этом случае это будет объект, обладающий свойствами типа и идентификатора.