首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不正确JSONException

不正确JSONException
EN

Stack Overflow用户
提问于 2017-04-15 12:57:05
回答 2查看 61关注 0票数 1

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

这是我打电话的结果:

https://pastebin.com/wqggLEeZ

这是我的密码

代码语言:javascript
复制
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)处。

我尝试将imageUrl替换为"test“字符串

代码语言:javascript
复制
news.add(new NewsList(articleTitle, imageUrl));

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

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

代码语言:javascript
复制
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: main没有值

但是这是不正确的,因为找到前3个结果的URL是没有任何问题的,这个问题只有在循环的3次迭代之后才会发生,而且我找不到发生这种情况的任何原因。

EN

回答 2

Stack Overflow用户

发布于 2017-04-15 13:05:58

在任何地方使用“选择”而不是“获取”,例如:

代码语言:javascript
复制
JSONObject assetsElement = assetsArray.optJSONObject(0);
String imageUrl = assetsElement.optString("file");
票数 1
EN

Stack Overflow用户

发布于 2017-04-15 13:09:54

之所以发生这种情况,是因为响应中没有"main“字段在行中的某个位置。

代码语言:javascript
复制
            JSONObject mainElement = blocksElement.getJSONObject("main");

因此,如果在任何位置都没有响应中的任何字段,那么在该位置之后,代码将不会在JSON解析中编译。

抱歉英语不太好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43426334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档