我需要在另一个JSONArray内创建一个JSONArray对象。 This is the json that I have to parse
我需要访问照片数组内部的照片数组中的标题,id和image_url
下面是我尝试过的代码。
private static List<ImagelistActivity> extractFeatureFromJson(String flickrJSON) {
if (TextUtils.isEmpty(flickrJSON)) {
return null;
}
List<ImagelistActivity> images = new ArrayList<>();
try {
JSONObject baseJsonResponse = new JSONObject(flickrJSON);
JSONObject photos = baseJsonResponse.getJSONObject("photos");
JSONArray photo = photos.getJSONArray("photo");
for (int i = 0; i < photo.length(); i++) {
JSONObject currentImage = photo.getJSONObject(i);
String id = currentImage.getString("id");
String url = currentImage.getString("url_s");
String title = currentImage.getString("title");
ImagelistActivity img = new ImagelistActivity(id, title, url);
images.add(img);
}
} catch (JSONException e) {
.
Log.e("QueryUtils", "Problem parsing the Image JSON results", e);
}
return images;
}
但这不起作用
org.json.JSONException:图片无值
答案 0 :(得分:1)
查看原始数据。您只有一个称为照片的阵列。
{"photos"{...
...
"photo": [...
在获取数组之前,您错过了基本响应中的photos
的顶部对象键。
顺便说一句,我建议您使用已经为您处理了此逻辑的API。例如https://github.com/boncey/Flickr4Java
答案 1 :(得分:0)
您的JSON格式如下:
照片>照片
因此,首先,您必须获取JSONObject Photos,然后从那里获取Photo数组。 例如
-Ylog-classpath
编辑
对于您的新代码,错误是,JSON数组中的某些JSON对象没有url_s的密钥
...
JSONObject baseJsonResponse = new JSONObject(flickrJSON);
JSONObject photos = baseJsonResponse.getJSONObject("photos");
JSONArray photo = photos.getJSONArray("photo");
...
因此,最好先检查JSONObject是否具有名为url_s的密钥
{
"id": "30847132948",
"owner": "140768897@N07",
"secret": "2e224eedf8",
"server": "1892",
"farm": 2,
"title": "Missouri Lawmakers Pass Computer Science...",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
}
答案 2 :(得分:0)
解雇手动方式...
使用jackson并创建一个代表数据的POJO。您可以使用在线服务从JSON为您创建POJO / Class代码,并将其注释为@Data。
然后可以使用ObjectMapper解析json-> POJO或POJO-> json。