JSONException

时间:2017-04-15 12:57:06

标签: java android json

我正在尝试使用Guardian API中的JSON对象。

这是我打电话的结果:

https://pastebin.com/wqggLEeZ

这是我的代码

JSONObject root = new JSONObject(jsonData);
JSONArray resultArray = root.getJSONObject("response").getJSONArray("results");

for(int i=0;i<resultArray.length();i++) {
    JSONObject resultElement = resultArray.getJSONObject(i);
    JSONObject blocksElement = resultElement.getJSONObject("blocks");
    JSONObject mainElement = blocksElement.getJSONObject("main");
    JSONArray elementsArray = mainElement.getJSONArray("elements");
    JSONObject elementsElement = elementsArray.getJSONObject(0);
    JSONArray assetsArray = elementsElement.getJSONArray("assets");
    JSONObject assetsElement = assetsArray.getJSONObject(0);

    String imageUrl = assetsElement.getString("file");
    String articleTitle = resultElement.getString("webTitle");

    news.add(new NewsList(articleTitle, imageUrl));
}

代码工作正常,但它停在3个元素(i = 2)

我尝试用

中的“test”字符串替换imageUrl
news.add(new NewsList(articleTitle, imageUrl));

但它仍然停留在3个元素。

但是当我注释掉它找到imageUrl的部分时,整个代码都可以工作,并给出了10个应该做​​的结果:

JSONObject root = new JSONObject(jsonData);
JSONArray resultArray = root.getJSONObject("response").getJSONArray("results");

for(int i=0;i<resultArray.length();i++){
    JSONObject resultElement = resultArray.getJSONObject(i);
    /*
    JSONObject blocksElement = resultElement.getJSONObject("blocks");
    JSONObject mainElement = blocksElement.getJSONObject("main");
    JSONArray elementsArray = mainElement.getJSONArray("elements");
    JSONObject elementsElement = elementsArray.getJSONObject(0);
    JSONArray assetsArray = elementsElement.getJSONArray("assets");
    JSONObject assetsElement = assetsArray.getJSONObject(0);
    String imageUrl = assetsElement.getString("file");
    */

    String articleTitle = resultElement.getString("webTitle");

    news.add(new NewsList(articleTitle, "test"));
}

我在Android显示器中环顾四周,似乎有一个问题

  

org.json.JSONException:没有值

但这不正确,因为找到前3个结果的URL没有任何问题,问题只发生在循环的3次迭代之后,我找不到任何理由说明为什么会这样。

2 个答案:

答案 0 :(得分:1)

在任何地方使用“opt”而不是“get”,例如:

JSONObject assetsElement = assetsArray.optJSONObject(0);
String imageUrl = assetsElement.optString("file");

答案 1 :(得分:1)

这种情况正在发生,因为行中某个位置的响应中没有字段“main”

            JSONObject mainElement = blocksElement.getJSONObject("main");

因此,如果在响应中缺少任何字段的任何位置,则在该位置之后代码将无法在JSON解析中编译。

抱歉英语不好。