首页 > 关于Gson解析json数据时如果属性值为null则会报空的问题

关于Gson解析json数据时如果属性值为null则会报空的问题

想试试用Gson来解析json数据

这是data_info

{"careingpeople_id":"33","lovecode":null,"appellation":"父亲","name":"王健林","birthday":"2015-04-08","mobile":"15689653698","areano":"320583","communityno":"1","communityname":"测试小区","agency_id":"1","street":"","canselfcare":"0","language":"本地话","disease":"糖尿病","memo":"哈哈","ctime":"2015-04-08 10:22:33"}

这是解析的方法

 old_man_info_data = GsonUtil.getInstance().fromJson(data_info, OldManInfoData.class);

其中json数据中有一个字段的值是null

"lovecode":null

此时如果执行如下代码,就会报错

Log.e("这是什么鬼", old_info.getLovecode());

这是错误

 Caused by: java.lang.NullPointerException: println needs a message

想请问一下,有人碰到过类似问题吗?如何解决?

谢谢!

补充:Google了一下,有人说用下边这段代码

gson=new GsonBuilder().serializeNulls().create();

可以解决,但是我试过了,没用。


贴一个google+的答案,将null替换成""

import java.lang.reflect.Type;

public class StringConverter implements JsonSerializer<String>, 
    JsonDeserializer<String> { 
public JsonElement serialize(String src, Type typeOfSrc, 
    JsonSerializationContext context) { 
    if ( src == null ) { 
        return new JsonPrimitive(""); 
    } else { 
        return new JsonPrimitive(src.toString()); 
} 
public String deserialize(JsonElement json, Type typeOfT, 
    JsonDeserializationContext context) 
        throws JsonParseException { 
    return json.getAsJsonPrimitive().getAsString(); 
} 
}

然后这么用:

GsonBuilder gb = new GsonBuilder(); 
gb.registerTypeAdapter(String.class, new StringConverter()); 
Gson gson = gb.create(); 

这种问题,就是普通的java 空指针,是你的对象是null,调用它的get方法 肯定就会 空指针,补救版本就是 加判断,或者修改数据源


如果服务端配合你,遇到空值改成""空字符串就好。

如果只能本地改那就要每次都要判断,不能用Gson解析

 if (dataObject.has("id") && !dataObject.isNull("id")) {
     dataObject.getString("id"));
 }

这根本不是Gson的问题好吧。。。。
明明就是你的那个值就是null。
所以你的那句

Log.e("这是什么鬼", old_info.getLovecode());

就等价于

Log.e("这是什么鬼", null);

如果你改成

Log.e("这是什么鬼", old_info.getLovecode()!=null?old_info.getLovecode():"");

就不会错了,错了你打我。

【热门文章】
【热门文章】