2016-09-15 123 views
0

我有这样的JSON结果:JSON遍历虽然嵌套数组

{"Search":[ 
    {"Title":"Batman Begins","Year":"2005","imdbID":"tt0372784","Type":"movie","Poster":"N/A"}, 
    {"Title":"Batman v Superman: Dawn of Justice","Year":"2016","imdbID":"tt2975590","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BYThjYzcyYzIt[email protected]._V1_SX300.jpg"}, 
    {"Title":"Batman","Year":"1989","imdbID":"tt0096895","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BMTYwNjAyODIyMF5BMl5BanBnXkFtZTYwNDMwMDk2._V1_SX300.jpg"},{"Title":"Batman Returns","Year":"1992","imdbID":"tt0103776","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"}, 
    {"Title":"Batman Forever","Year":"1995","imdbID":"tt0112462","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BNWY3M2I0YzIt[email protected]._V1_SX300.jpg"},{"Title":"Batman & Robin","Year":"1997","imdbID":"tt0118688","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BMGQ5YTM1NmMt[email protected]._V1_SX300.jpg"}, 
    {"Title":"Batman: The Animated Series","Year":"1992–1995","imdbID":"tt0103359","Type":"series","Poster":"http://ia.media-imdb.com/images/M/MV5BMTU3MjcwNzY3NF5BMl5BanBnXkFtZTYwNzA2MTI5._V1_SX300.jpg"}, 
    {"Title":"Batman: Under the Red Hood","Year":"2010","imdbID":"tt1569923","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"}, 
    {"Title":"Batman: The Dark Knight Returns, Part 1","Year":"2012","imdbID":"tt2313197","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"}, 
    {"Title":"Batman: The Dark Knight Returns, Part 2","Year":"2013","imdbID":"tt2166834","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"}], 
    "totalResults":"312", 
    "Response":"True" 
} 

我通过数组试图环和发布每个“电影”为单独的div块,我似乎无法检索正确地从阵列信息...

我想这个代码,它使用JavaScript警告()当正常工作......但只要我想与.text区段()的信息,我得到TypeError: undefined is not an object...

这里是适用于警报的代码,但不适用于.text()

$.ajax(search_sUrl, { 
    complete: function(p_oXHR, p_sStatus){ 
     oData_search = $.parseJSON(p_oXHR.responseText); 

     for(var i = 0; i <= oData_search.totalResults; i++) { 
      alert(oData_search["Search"][i].Title);  
     } 
    } 
}); 
+0

如果'.totalResults'代表数组的典型'.length',那么您可以添加如何使用'text()' – eithed

+3

'我<='应该是'我''。 – 2016-09-15 13:30:24

+0

例如'$ movie_container.find('。movie_block').text(oData_search [“Search”] [i] .Title);' –

回答

2
  1. 使用oData_search.Search.length得到数组的大小<=

var oData_search = { 
 
    "Search": [{ 
 
    "Title": "Batman Begins", 
 
    "Year": "2005", 
 
    "imdbID": "tt0372784", 
 
    "Type": "movie", 
 
    "Poster": "N/A" 
 
    }, { 
 
    "Title": "Batman v Superman: Dawn of Justice", 
 
    "Year": "2016", 
 
    "imdbID": "tt2975590", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/MV5BYThjYzcyYzIt[email protected]._V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman", 
 
    "Year": "1989", 
 
    "imdbID": "tt0096895", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMTYwNjAyODIyMF5BMl5BanBnXkFtZTYwNDMwMDk2._V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman Returns", 
 
    "Year": "1992", 
 
    "imdbID": "tt0103776", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman Forever", 
 
    "Year": "1995", 
 
    "imdbID": "tt0112462", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/MV5BNWY3M2I0YzIt[email protected]._V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman & Robin", 
 
    "Year": "1997", 
 
    "imdbID": "tt0118688", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMGQ5YTM1NmMt[email protected]._V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman: The Animated Series", 
 
    "Year": "1992–1995", 
 
    "imdbID": "tt0103359", 
 
    "Type": "series", 
 
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMTU3MjcwNzY3NF5BMl5BanBnXkFtZTYwNzA2MTI5._V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman: Under the Red Hood", 
 
    "Year": "2010", 
 
    "imdbID": "tt1569923", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman: The Dark Knight Returns, Part 1", 
 
    "Year": "2012", 
 
    "imdbID": "tt2313197", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg" 
 
    }, { 
 
    "Title": "Batman: The Dark Knight Returns, Part 2", 
 
    "Year": "2013", 
 
    "imdbID": "tt2166834", 
 
    "Type": "movie", 
 
    "Poster": "http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg" 
 
    }], 
 
    "totalResults": "312", 
 
    "Response": "True" 
 
} 
 

 
for (var i = 0; i < oData_search.Search.length; i++) { 
 
    var movie = oData_search.Search[i]; 
 
    $('#results').append('<div>' + movie.Title + ' - ' + movie.Year + '</div>') 
 
}
#results div { 
 
    background: #ddd; 
 
    padding: 4px; 
 
    margin-bottom: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="results"></div>

+0

谢谢你的答案。任何想法如何在for循环中创建一个“div”并将每个影片包含在该div内? –

+0

I '已经添加了一个简单的例子来创建'divs'作为结果。可能是这样的。@AlexandruVlas – eisbehr

+0

是的,谢谢,完美的作品 –

1

这是因为您的循环运行了312次,但您的对象只包含几个项目。当您的循环遍历实际的项目长度时,oData_search["Search"][i]将为undefined,因此错误“未定义不是对象”。

改为检查数组长度。

for(var i = 0; i < oData_search.Search.length; i++) 
+1

债券它应该是'<''不是'<='... – eisbehr

1

  • 使用i < oData_search.Search.length代替试试这个:

    for(var i = 0; i < oData_search["Search"].length; i++) { 
          var title = oData_search["Search"][i].Title  
        } 
    

    totalResults的值为312,但oData_search["Search"]中的元素为8。

  • 1

    因为oData_search.Search是一个数组而不是经典for循环,您可以使用Array.prototype.forEach()。这样可以避免让数组本身所不具备的元素:

    一个小例子:

    var str = '{"Search":[\ 
     
    {"Title":"Batman Begins","Year":"2005","imdbID":"tt0372784","Type":"movie","Poster":"N/A"},\ 
     
    {"Title":"Batman v Superman: Dawn of Justice","Year":"2016","imdbID":"tt2975590","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BYThjYzcyYzIt[email protected]._V1_SX300.jpg"},\ 
     
    {"Title":"Batman","Year":"1989","imdbID":"tt0096895","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BMTYwNjAyODIyMF5BMl5BanBnXkFtZTYwNDMwMDk2._V1_SX300.jpg"},{"Title":"Batman Returns","Year":"1992","imdbID":"tt0103776","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"},\ 
     
    {"Title":"Batman Forever","Year":"1995","imdbID":"tt0112462","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BNWY3M2I0YzIt[email protected]._V1_SX300.jpg"},{"Title":"Batman & Robin","Year":"1997","imdbID":"tt0118688","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BMGQ5YTM1NmMt[email protected]._V1_SX300.jpg"},\ 
     
    {"Title":"Batman: The Animated Series","Year":"1992–1995","imdbID":"tt0103359","Type":"series","Poster":"http://ia.media-imdb.com/images/M/MV5BMTU3MjcwNzY3NF5BMl5BanBnXkFtZTYwNzA2MTI5._V1_SX300.jpg"},\ 
     
    {"Title":"Batman: Under the Red Hood","Year":"2010","imdbID":"tt1569923","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"},\ 
     
    {"Title":"Batman: The Dark Knight Returns, Part 1","Year":"2012","imdbID":"tt2313197","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"},\ 
     
    {"Title":"Batman: The Dark Knight Returns, Part 2","Year":"2013","imdbID":"tt2166834","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"}],\ 
     
    "totalResults":"312",\ 
     
    "Response":"True"\ 
     
    }'; 
     
    
     
    oData_search = $.parseJSON(str); 
     
    oData_search.Search.forEach(function(ele, idx) { 
     
        console.log(ele.Title); 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    1

    oData_search = {"Search":[ 
     
        {"Title":"Batman Begins","Year":"2005","imdbID":"tt0372784","Type":"movie","Poster":"N/A"}, 
     
        {"Title":"Batman v Superman: Dawn of Justice","Year":"2016","imdbID":"tt2975590","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BYThjYzcyYzIt[email protected]._V1_SX300.jpg"}, 
     
        {"Title":"Batman","Year":"1989","imdbID":"tt0096895","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BMTYwNjAyODIyMF5BMl5BanBnXkFtZTYwNDMwMDk2._V1_SX300.jpg"},{"Title":"Batman Returns","Year":"1992","imdbID":"tt0103776","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"}, 
     
        {"Title":"Batman Forever","Year":"1995","imdbID":"tt0112462","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BNWY3M2I0YzIt[email protected]._V1_SX300.jpg"},{"Title":"Batman & Robin","Year":"1997","imdbID":"tt0118688","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BMGQ5YTM1NmMt[email protected]._V1_SX300.jpg"}, 
     
        {"Title":"Batman: The Animated Series","Year":"1992–1995","imdbID":"tt0103359","Type":"series","Poster":"http://ia.media-imdb.com/images/M/MV5BMTU3MjcwNzY3NF5BMl5BanBnXkFtZTYwNzA2MTI5._V1_SX300.jpg"}, 
     
        {"Title":"Batman: Under the Red Hood","Year":"2010","imdbID":"tt1569923","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"}, 
     
        {"Title":"Batman: The Dark Knight Returns, Part 1","Year":"2012","imdbID":"tt2313197","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"}, 
     
        {"Title":"Batman: The Dark Knight Returns, Part 2","Year":"2013","imdbID":"tt2166834","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"}], 
     
        "totalResults":"312", 
     
        "Response":"True" 
     
    } 
     
    oData_search.Search.forEach(function(value, key){ 
     
        console.log(value.Title); 
     
    });

    forEach()

    oData_search.Search.forEach(function(value, key){ 
        console.log(value.Title); 
    });