所以,有这个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“
答案 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时手动填充它们,就像您在问题中所做的那样。如果您使用Gson
或Jackson
JSON解析库,则他们能够获取您拥有的JSON并将所有数据映射到您创建的类并在一次调用中返回它们。