迭代JSON响应以从数组/对象获取键和值

时间:2014-12-21 18:11:06

标签: jquery json parsing iteration jsonobject

我正在尝试遍历industryIdentifier列表并保存类型和标识符值。

我尝试过使用以下代码,但是输出结果未定义。

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 个答案:

答案 0 :(得分:1)

这是因为你错误地使用$.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);
                });
        });

并且,您可以查看demo here

而且,您错误地访问结果 JSON 。由于它返回单个值,您可以直接以data.id的形式访问它。

答案 1 :(得分:0)

你有两个问题。第一个问题是data.items未定义,为了访问该数据对象中的属性,您必须执行此data.nameOfProperty。您的第二个问题是,当您遍历industryIdentifier时,您必须在$ .each调用中为匿名函数声明第二个参数。由于第一个参数只是数组的索引而第二个参数是元素的值,因此在这种情况下,它将是具有类型和标识符属性的对象。

答案 2 :(得分:0)

试试这段代码......

 $(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/v5cornfb/