Android迭代包含JSON对象的JSON数组

时间:2013-09-12 03:10:55

标签: java android json arrays

所以我有这个代码,它基本上从JSON数组中获取一个值(包含几个对象)并适当地分配它。

// RETRIEVE CAST LIST
JSONArray jCastArr = jObj.getJSONArray("abridged_cast");
Cast person = new Cast();
ArrayList<Cast> castList= new ArrayList<Cast>();

for (int i=0; i < jCastArr.length(); i++) {
    JSONObject jpersonObj = jCastArr.getJSONObject(i);

    person.castId = (String) jpersonObj.getString("id");
    person.castFullName = (String) jpersonObj.getString("name");

    castList.add(person);
}
details.castList = castList;

JSON值(腐烂的西红柿)

{
    "id": 771267761,
    "title": "Riddick",
    "year": 2013,
    "genres": [
        "Action & Adventure",
        "Science Fiction & Fantasy"
    ],
    "mpaa_rating": "R",
    "runtime": 119,
    "critics_consensus": "It may not win the franchise many new converts, but this back-to-basics outing brings Riddick fans more of the brooding sci-fi action they've come to expect.",
    "release_dates": {
        "theater": "2013-09-06"
    },
    "ratings": {
        "critics_rating": "Rotten",
        "critics_score": 57,
        "audience_rating": "Upright",
        "audience_score": 66
    },
    "synopsis": "Blah.....",
    "posters": {
        "thumbnail": "http://content8.flixster.com/movie/11/17/20/11172082_mob.jpg",
        "profile": "http://content8.flixster.com/movie/11/17/20/11172082_pro.jpg",
        "detailed": "http://content8.flixster.com/movie/11/17/20/11172082_det.jpg",
        "original": "http://content8.flixster.com/movie/11/17/20/11172082_ori.jpg"
    },
    "abridged_cast": [
        {
            "name": "Vin Diesel",
            "id": "162652472",
            "characters": [
                "Riddick"
            ]
        },
        {
            "name": "Karl Urban",
            "id": "162654704",
            "characters": [
                "Vaako"
            ]
        },
        {
            "name": "Jordi Molla",
            "id": "364617086",
            "characters": [
                "Santana"
            ]
        },
        {
            "name": "Matt Nable",
            "id": "771069067",
            "characters": [
                "Boss Johns"
            ]
        },
        {
            "name": "Katee Sackhoff",
            "id": "459518520",
            "characters": [
                "Dahl"
            ]
        }
    ],
    "abridged_directors": [
        {
            "name": "David Twohy"
        }
    ],
    "studio": "Universal Classics",
    "alternate_ids": {
        "imdb": "1411250"
    },
    "links": {
        "self": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761.json",
        "alternate": "http://www.rottentomatoes.com/m/riddick/",
        "cast": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/cast.json",
        "clips": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/clips.json",
        "reviews": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/reviews.json",
        "similar": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/similar.json"
    }
}

问题在于我称之为

ArrayList<Cast> list = details.castList;
Cast actor = list.get(0);
String temp = actor.castFullName;
longToast(temp);

它将永远归还Katee Sackhoff(无论它是什么指数位置)。我试图使用for循环迭代它,但我只想保持它的简单以便进行调试。

1 个答案:

答案 0 :(得分:6)

您为每个条目使用相同的Cast对象 在每次迭代中,您只需更改同一个对象,而不是创建一个新对象。

此代码应修复它:

JSONArray jCastArr = jObj.getJSONArray("abridged_cast");
ArrayList<Cast> castList= new ArrayList<Cast>();

for (int i=0; i < jCastArr.length(); i++) {
    Cast person = new Cast();  // create a new object here
    JSONObject jpersonObj = jCastArr.getJSONObject(i);

    person.castId = (String) jpersonObj.getString("id");
    person.castFullName = (String) jpersonObj.getString("name");

    castList.add(person);
}
details.castList = castList;