JsonObject null 的神坑
现在开源的 Json 序列化方案层出不穷,在性能和使用方面,都取得了很好的效果,比较常用的包括 来看看这个例子,这样的一个 Json 键值对。 {
"userName":null }
和下面的这个 Json 键值对。 {
"userName":"null" }
区别就在 value 上面,一个是实际的 null,另一个是字符串 “null”。我们知道这两个区别很大,但本着科学的态度,我们先用 Gson 来做一下测试,看看情况是否是我们想象中的那样。 新建了一个 People 的类,方便通过 Gson 进行反序列化。 public class People implements Serializable {
private static final long serialVersionUID = -7182026066461954852L;
public String userName;
}
再通过实际的代码,来进行测试。 Gson gson = new Gson();
People p1= gson.fromJson("{n" +
" "userName":nulln" +
"}",People.class);
People p2 = gson.fromJson("{n" +
" "userName":"null"n" +
"}",People.class);
Log.d("tango",String.valueOf(TextUtils.isEmpty(p1.userName)));
Log.d("tango",String.valueOf(TextUtils.isEmpty(p2.userName)));
最后输出的结果,分别是 接下来看看 JsonObject 的表现如何,代码很简单,如下所示。 try {
JSONObject jsonObject1 = new JSONObject("{n" +
" "userName":nulln" +
"}");
Log.d("tango",jsonObject1.getString("userName"));
} catch (JSONException e) {
e.printStackTrace();
}
try {
JSONObject jsonObject2 = new JSONObject("{n" +
" "userName":"null"n" +
"}");
Log.d("tango",jsonObject2.getString("userName"));
} catch (JSONException e) {
e.printStackTrace();
}
这个地方不会崩溃吗?按道理上讲 在知道原因以后,解决起来也很容易,在 JsonObject 提供了判断的方法,是 JsonObject.isNull。当然,可以的话,尽量不用 JsonObject ,毕竟不但慢,而且代码可读性差。 文档信息
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |