【问题标题】:Test if getJSONArray is null or not测试 getJSONArray 是否为空
【发布时间】:2011-08-18 15:33:23
【问题描述】:

我的代码提取 JSONObject 的结果,但有时 i 值不是从 1 开始,我有这样的错误:

org.json.JSONException: No value for 1

我的代码:

JSONObject obj = new JSONObject(result);
       for(int i=1;i<=14;i++) {

            JSONArray arr = obj.getJSONArray(""+i);
        extraction(arr, i);
       }

我想在提取之前测试目标代码 (i) 是否存在。我该怎么做?

【问题讨论】:

  • 我可能错了,但它不应该是从零开始的索引吗?

标签: java android json


【解决方案1】:

使用obj.optJSONArray(name),如果名称不存在,则响应将为空。

JSONObject obj = new JSONObject(result);
   for(int i=1;i<=14;i++) {

        JSONArray arr = obj.optJSONArray(""+i);
        if(arr != null) {
              extraction(arr, i);
        }
   }

【讨论】:

  • 这一行:JSONArray arr = obj.optJSONArray(""+i);对错误负责,并停止代码。它永远不会到达“如果”。我如何测试它是否为空?
  • 你需要了解getJSONArray和optJSONArray的区别。如果键不存在,第一个崩溃,第二个返回 null,您可以测试。
【解决方案2】:

使用JSONObject.optJSONArray(key).

如文档中所述,如果密钥不存在,它会返回 null。

另外,您的 JSON 结构看起来很奇怪。为什么对象中有数字有序键?那不应该是一个数组吗?

【讨论】:

  • 我的代码的特殊性,我需要一个 int 来检索数据库中的数据
【解决方案3】:

您不能使用 .length() 来检查 JSONArray 的返回 null。 使用 .isNull("xxx") 代替 .length(),示例如下:

JSONArray magazineLove  = null;
if(!socialBook.getJSONObject(i).isNull("MagazineLove"))
{
    magazineLove = socialBook.getJSONObject(i).getJSONArray("MagazineLove");                
}

Aey.Sakon

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 2011-02-27
    • 2018-08-10
    • 2011-09-17
    • 2011-02-15
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多