繁体   English   中英

如何使用$ .each JQuery遍历JSON对象?

[英]How to loop through JSON object with $.each JQuery?

我想使用Star Wars api的 JSON数据进行实时搜索。 JSON包含一些objects ,而我想获取的objectsresults ,它是一个包含objectsarray ,这些objects具有属性nameheightmass和ect。

JSON的片段如下所示:

    {
    "count": 87,
    "next": "http://swapi.co/api/people/?format=json&page=2",
    "previous": null,
    "results": [
    {
    "name": "Luke Skywalker",
    "height": "172",
    "mass": "77",
    "hair_color": "blond",
    "skin_color": "fair",
    "eye_color": "blue",
    "birth_year": "19BBY",
    "gender": "male",
    "homeworld": "http://swapi.co/api/planets/1/",
    "films": [
    "http://swapi.co/api/films/6/",
    "http://swapi.co/api/films/3/",
    "http://swapi.co/api/films/2/",
    "http://swapi.co/api/films/1/",
    "http://swapi.co/api/films/7/"
    ],
    "species": [
    "http://swapi.co/api/species/1/"
    ],
    "vehicles": [
    "http://swapi.co/api/vehicles/14/",
    "http://swapi.co/api/vehicles/30/"
    ],
    "starships": [
    "http://swapi.co/api/starships/12/",
    "http://swapi.co/api/starships/22/"
    ],
    "created": "2014-12-09T13:50:51.644000Z",
    "edited": "2014-12-20T21:17:56.891000Z",
    "url": "http://swapi.co/api/people/1/"
    }
]
}

我尝试使用此代码,但控制台显示Uncaught TypeError: Cannot read property 'name' of undefined (第7行)

$('#search').keyup(function() {
    var searchField = $('#search').val();
    var myExp = new RegExp(searchField, "i");
    $.getJSON('http://swapi.co/api/people/?format=json', function(data) {
        var output = '<ul class="searchresults">';
        $.each(data, function(key, val) {
            if ((val.results.name.search(myExp) != -1) ||
            (val.results.height.search(myExp) != -1)) {
                output += '<li>';
                output += '<h2>'+ val.name +'</h2>';
                output += '<p>'+ val.height +'</p>';
                output += '</li>';
            }
        });
        output += '</ul>';
        $('#update').html(output);
    });
});

我知道我的循环有问题,我尝试寻找答案,但是我找不到正确的答案。 你能帮我么?

这是一个简单的错误,您应该遍历数据。

$.getJSON('http://swapi.co/api/people/?format=json', function(data) {
    $.each(data.results, function(key, val) { 
    console.log(val.name); 
    })
});

您的JSON包含:

因此,您必须获得结果并对其进行迭代。

您需要像这样遍历data对象的results

$.getJSON('http://swapi.co/api/people/?format=json', function(data) {
  $.each(data.results, function(key, value){
    console.log("key", key); 
    console.log("value", value.name)
   })
})

或您的情况:

$('#search').keyup(function() {
    var searchField = $('#search').val();
    var myExp = new RegExp(searchField, "i");
    $.getJSON('http://swapi.co/api/people/?format=json', function(data) {
        var output = '<ul class="searchresults">';
        $.each(data.results, function(key, val) { //Only this line changes.
            if ((val.results.name.search(myExp) != -1) ||
            (val.results.height.search(myExp) != -1)) {
                output += '<li>';
                output += '<h2>'+ val.name +'</h2>';
                output += '<p>'+ val.height +'</p>';
                output += '</li>';
            }
        });
        output += '</ul>';
        $('#update').html(output);
    });
});

我认为您应该有这样的东西:

output += '<h2>'+ val.results.name +'</h2>';
output += '<p>'+ val.results.height +'</p>';

与您的if条件完全一样

使您的$.each循环如下:因为val.results是json的数组格式。

$.each(data, function(key, val) {
        var results = val.results;
        $.each(results,function(index,value){
            if ((value[index].name.search(myExp) != -1) ||
            (value[index].height.search(myExp) != -1)) {
                output += '<li>';
                output += '<h2>'+ value[index].name +'</h2>';
                output += '<p>'+ value[index].height +'</p>';
                output += '</li>';
            }
        });

        });

希望它能正常工作。

或者简单地

        $.each(data.results,function(index,value){
            if ((value[index].name.search(myExp) != -1) ||
            (value[index].height.search(myExp) != -1)) {
                output += '<li>';
                output += '<h2>'+ value[index].name +'</h2>';
                output += '<p>'+ value[index].height +'</p>';
                output += '</li>';
            }
        });

可能对您来说就足够了。

尝试这个

var a = //your json;

$.each(a,function(i,val){
if(val.results.length != 0){
$.each(val.results,function(k,value){
console.log(value.name)})
}
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM