如何访问 JSON 数组中的子项
How to Access Child Item In JSON Array
我正在根据某些搜索词查询 FlickR,响应是一个 JSON 数组。这是根级别以及前两个结果:
{
photos: {
page: 1,
pages: 4222,
perpage: 100,
total: "422175",
photo: [
{
id: "28571356563",
owner: "8372889@N03",secret: "c4ca6c4364",
server: "8050",
farm: 9,
title: "95040021.jpg",
ispublic: 1,
isfriend: 0,
isfamily: 0,
url_m: "https://farm9.staticflickr.com/8050/28571356563_c4ca6c4364.jpg",
height_m: "332",
width_m: "500"
},
{
id: "28571342883",
owner: "96125450@N00",
secret: "db35a59412",
server: "8307",
farm: 9,
title: "Red #Sunset #Silhouette #Trees #Photography",
ispublic: 1,
isfriend: 0,
isfamily: 0,
url_m: "https://farm9.staticflickr.com/8307/28571342883_db35a59412.jpg",
height_m: "500",
width_m: "424"
},
当我加载结果时,我将遍历所有项目("total" 图)并加载到 RecyclerView 中。
最终,我想遍历 "photos",然后为每张照片获取 "url_m"。这是我当前通过 Retrofit 对 FlickR API 的调用:
Call<List<Photo>> call = apiInterface.getImages(mQuery);
call.enqueue(new Callback<List<Photo>>() {
@Override
public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) {
}
@Override
public void onFailure(Call<List<Photo>> call, Throwable t) {
}
});
}
});
我如何遍历所有照片并为每张照片获取 URL?我为每个精确映射到 FlickR API JSON 对象的对象设置了模型 类:
我认为您在代码中实施了错误的 Retrofit 回调。如我所见,您首先收到一个名为 photos
的 JSONObject,其中包含一个 JSONArray photo
,因此您的代码应如下所示
Call<PhotoResult> call = apiInterface.getImages(query);
call.enqueue(new Callback<PhotoResult>() {...}
如您所见,回调对象是 PhotoResult
,它是您 json 响应的根级别,您应该在其中检索 List<Photo>
集合。
要生成您的 POJO,您可以使用此网站
http://www.jsonschema2pojo.org/
你的 POJO 应该是这样的
public class PhotoResult {
@SerializedName("photos")
@Expose
public Photos photos;
}
public class Photos {
@SerializedName("page")
@Expose
public Integer page;
@SerializedName("pages")
@Expose
public Integer pages;
@SerializedName("perpage")
@Expose
public Integer perpage;
@SerializedName("total")
@Expose
public String total;
@SerializedName("photo")
@Expose
public List<Photo> photo = new ArrayList<Photo>();
}
public class Photo {
...
}
我正在根据某些搜索词查询 FlickR,响应是一个 JSON 数组。这是根级别以及前两个结果:
{
photos: {
page: 1,
pages: 4222,
perpage: 100,
total: "422175",
photo: [
{
id: "28571356563",
owner: "8372889@N03",secret: "c4ca6c4364",
server: "8050",
farm: 9,
title: "95040021.jpg",
ispublic: 1,
isfriend: 0,
isfamily: 0,
url_m: "https://farm9.staticflickr.com/8050/28571356563_c4ca6c4364.jpg",
height_m: "332",
width_m: "500"
},
{
id: "28571342883",
owner: "96125450@N00",
secret: "db35a59412",
server: "8307",
farm: 9,
title: "Red #Sunset #Silhouette #Trees #Photography",
ispublic: 1,
isfriend: 0,
isfamily: 0,
url_m: "https://farm9.staticflickr.com/8307/28571342883_db35a59412.jpg",
height_m: "500",
width_m: "424"
},
当我加载结果时,我将遍历所有项目("total" 图)并加载到 RecyclerView 中。
最终,我想遍历 "photos",然后为每张照片获取 "url_m"。这是我当前通过 Retrofit 对 FlickR API 的调用:
Call<List<Photo>> call = apiInterface.getImages(mQuery);
call.enqueue(new Callback<List<Photo>>() {
@Override
public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) {
}
@Override
public void onFailure(Call<List<Photo>> call, Throwable t) {
}
});
}
});
我如何遍历所有照片并为每张照片获取 URL?我为每个精确映射到 FlickR API JSON 对象的对象设置了模型 类:
我认为您在代码中实施了错误的 Retrofit 回调。如我所见,您首先收到一个名为 photos
的 JSONObject,其中包含一个 JSONArray photo
,因此您的代码应如下所示
Call<PhotoResult> call = apiInterface.getImages(query);
call.enqueue(new Callback<PhotoResult>() {...}
如您所见,回调对象是 PhotoResult
,它是您 json 响应的根级别,您应该在其中检索 List<Photo>
集合。
要生成您的 POJO,您可以使用此网站
http://www.jsonschema2pojo.org/
你的 POJO 应该是这样的
public class PhotoResult {
@SerializedName("photos")
@Expose
public Photos photos;
}
public class Photos {
@SerializedName("page")
@Expose
public Integer page;
@SerializedName("pages")
@Expose
public Integer pages;
@SerializedName("perpage")
@Expose
public Integer perpage;
@SerializedName("total")
@Expose
public String total;
@SerializedName("photo")
@Expose
public List<Photo> photo = new ArrayList<Photo>();
}
public class Photo {
...
}