2016-09-15 120 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); 
    });