Android - 如何从api.rottentomatoes解析JSONObject和JSONArrays

时间:2013-06-13 12:08:52

标签: java android json

所以,有这个JSON代码。我试图获得“abridged_cast”。 但它很复杂。 它的JSONObject 在JSONArray里面jSONObject里面JsonArray ....

{
    "total": 591,
    "movies": [
        {
            "title": "Jack and Jill",
            "year": 2011,
            "runtime": "",
            "release_dates": {
                "theater": "2011-11-11"
            },
            "ratings": {
                "critics_score": -1,
                "audience_score": 90
            },
            "synopsis": "",
            "posters": {
                "thumbnail": "",
                "profile": "",
                "detailed": "",
                "original": ""
            },
            "abridged_cast": [
                {
                    "name": "Al Pacino",
                    "characters": []
                },
                {
                    "name": "Adam Sandler",
                    "characters": []
                },
                {
                    "name": "Katie Holmes",
                    "characters": []
                }
            ],
            "links": {
                "self": "",
                "alternate": ""
            }
        }
    ],
    "links": {
        "self": "",
        "next": ""
    },
    "link_template": ""
}

这是我获得“头衔”和“年份”的代码

if (response != null) {
            try {
                // convert the String response to a JSON object,
                // because JSON is the response format Rotten Tomatoes uses
                JSONObject jsonResponse = new JSONObject(response);

                // fetch the array of movies in the response
                JSONArray movies = jsonResponse.getJSONArray("movies");

                // add each movie's title to an array
                movieTitles = new String[movies.length()];
                for (int i = 0; i < movies.length(); i++) {
                    JSONObject movie = movies.getJSONObject(i);
                    movieTitles[i] = movie.getString("title");
                }

希望有人能帮助我,因为我无法弄清楚如何获得abridged_cast“

2 个答案:

答案 0 :(得分:0)

try {
                 String Movie = null;
                 String abridged = null;
                JSONArray jsonResponse = new JSONArray(response);
                 for (int i = 0; i< jsonResponse.length(); i++) {
                        Movie     =   jsonResponse.getJSONObject(i).getString("movies").toString();
                        System.out.println("movies="+Movie);
                       abridged =   jsonResponse.getJSONObject(i).getString("abridged_cast").toString();
                 }


                 JSONArray jArray = new JSONArray(Movie);
                 for (int i = 0; i< jArray.length(); i++) {
                     String title       =   jArray.getJSONObject(i).getString("title").toString();
                     System.out.println("title="+title);

                 }

                JSONArray jabridgeArray = new JSONArray(abridged);
                 for (int i = 0; i< jabridgeArray.length(); i++) {
                     String title       =   jabridgeArray.getJSONObject(i).getString("name").toString();
                     System.out.println("title="+title);

                 }

            } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

答案 1 :(得分:0)

movies包含一系列“电影”对象。这些对象中的每一个都包含一个字段abridged_cast,它是一个(我们称之为“演员”)对象的数组。

如果您不打算映射到POJO而是通过JSON,那么您只需要在获得movie之后在循环中获取该数组,并从中获取每个“演员”对象使用另一个循环以相同的方式进行数组。

...
JSONArray cast = movie.getJSONArray("abridged_cast");
for (int j = 0; j < cast.length(); j++) {
    JSONObject castMember = cast.getJSONObject(j);
    ... 
}

根据评论进行修改:您的原始问题涉及如何从您拥有的JSON中提取信息;上面的代码解释了这一点。现在看来,您正在询问有关如何使用它的更基本的编程问题。

如果您要使用Android附带的org.json类,您现在知道如何访问返回的JSON对象中的信息。您可以使用JSONObject包中的对象和方法围绕解析的json.org编写方法来按原样访问数据。例如,您可以编写一个“getMovie()”方法,该方法将电影的名称作为字符串,并搜索右侧的“movies”数组并将其作为JSONObject返回。

通常你会用Java创建一个类,它封装了那个JSON中返回的数据,并使用适合你的访问模式的数据结构(例如,Map使用它们的名称作为键来包含所有电影) 。使用org.json类,您必须实例化这些对象,并在解析JSON时手动填充它们,就像您在问题中所做的那样。如果您使用GsonJackson JSON解析库,则他们能够获取您拥有的JSON并将所有数据映射到您创建的类并在一次调用中返回它们。