JSONArray中的JSONArray

时间:2018-09-16 14:16:05

标签: android json

我需要在另一个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:图片无值

3 个答案:

答案 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的密钥

TL; DR

{
    "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。

A JSON to POJO using Jackson converter

Object Mapper Tutorial