【问题标题】:JSonException with null value具有空值的 JSONException
【发布时间】:2012-11-05 20:00:42
【问题描述】:

解析 JSon 时遇到很多问题,其中一个值为空值。

{
"available_from" : "2012-11-05T00:00:00Z",
"available_to" : "2012-11-30T00:00:00Z",
"category_id" : 2,
"created_at" : "2012-11-05T14:53:39Z",
...
}

例如,如果“category_id”等于 null,我的解析器会出现异常。我能做些什么来解决它?

希望我已经解释了自己..

【问题讨论】:

标签: android json exception


【解决方案1】:

在尝试从 JSONObject 获取值之前,您需要检查它是否具有键以及该值是否不是“null”。

每次尝试访问某个键时添加此 If 语句:

JSONObject jsonObject = new JSONObject(str);
if(jsonObject.has("category_id")&&!jsonObject.isNull("category_id")){
   String s = jsonObject.getString("category_id");      
}

【讨论】:

  • 除了这个答案:考虑编写自己的实用程序类来为您执行 has(name) 和 !isNull(name) - 大大简化您的代码
  • 您的意思是制作一些方法,将 JSON 对象和字符串键作为参数并返回 jsonObject.has(key)&&!jsonObject.isNull(key) ?好吧,我认为所有的解析都应该在一个单独的类中。
  • 要么进行空检查,要么将值作为字符串、整数等返回(与 jsonObject 本身的 getString 等价)
  • 用它创建一个 utils 类可能是个好主意。但是不是所有这些方法调用都会减慢应用程序的速度吗?假设我需要解析一个包含 30 个对象的列表,然后我需要在开始时进行大约 30*4 次方法调用 + 更多调用。
  • 你也可以使用 optString("category_id",null) - 见developer.android.com/reference/org/json/JSONObject.html
【解决方案2】:

考虑使用GSON?它确实简化了 JSON 解析。此外,如果您使用常规 jsonobjects,则值可能不为空。阅读documentation 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多