java - 不正确的 JSONException

标签 java android json jsonexception

我正在尝试使用来自 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) 处停止之外,代码工作正常

我尝试用“测试”字符串替换 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: No value for main

但这不正确,因为找到前 3 个结果的 URL 没有任何问题,问题仅在循环迭代 3 次后出现,我找不到发生这种情况的任何原因。

最佳答案

到处使用“opt”而不是“get”,例如:

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

关于java - 不正确的 JSONException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426334/

相关文章:

java - spring cloud aws 项目不再有活跃的所有者了吗?

java - httpClient.getConnectionManager() 已弃用-应该改用什么?

android - 在所有模块 Gradle android 中运行所有单元和检测

android - 如何从适配器获取变量值到android kotlin recyclerview中的 Activity ?

json - 将 sql 查询作为 json 文档导入到 azure data Lake 存储中

android - 如何从 URL 下载 JSON 对象数组,并为 Android 应用程序存储?

java - 如何找到 "max"

java - 使用 HttpClient 时发生致命异常

android - 将对象保存到内部存储器上的文件 (Android)

javascript - 如何从json渲染mustache js