android gson数据解析,Android之Gson脏数据解析

该博客介绍了在使用Gson解析后台数据时遇到的问题,特别是当后台返回空字符串代替对象时导致的解析错误。作者提供了一个解决方案,通过创建一个GsonUtil工具类,使用GsonBuilder注册自定义的JsonDeserializer来处理这种情况。当字段不是对象时,返回预设的空对象,从而避免解析异常。此方法利用Gson的容错机制确保数据序列化的正确性。
摘要由CSDN通过智能技术生成

在与后台数据交互中,总会遇到一些后台返回的脏数据,从而在用GsonFormat生成对象时报错。有数据时本来字段是一个对象,没数据时后台PHP返回的这个字段为“”,从而导致了数据解析错误,从而导致了异常。下面代码以此记录:

/**

* Gson解析工具类

* @param

*/

public class GsonUtils {

/** GsonUtils 单实例 */

private static GsonUtils mGsonUtils = null;

private GsonUtils(){ }

/**

* 单例初始化对象

**/

public static GsonUtils getInstance(){

if(mGsonUtils == null){

synchronized (GsonUtils.class){

if(mGsonUtils ==null) {

mGsonUtils = new GsonUtils();

}

}

}

return mGsonUtils;

}

/**

* 获取过滤对象的json数据

* @param baseType 对象类资源

* @param nullObj 空的对象数据

* @return

*/

public Gson getObjectJson(Class>[] baseType, Object[] nullObj ){

if(baseType == null || nullObj == null){

return new Gson();

}

GsonBuilder gsonBuilder = new GsonBuilder();

//循环添加过滤条件

for (int i = 0; i < nullObj.length; i++) {

addRegister(baseType[i],nullObj[i],gsonBuilder);

}

return gsonBuilder.create();

}

/**

* 添加过滤适配

* @param baseType

* @param nullObj

* @param gsonBuilder

* @return

*/

private GsonBuilder addRegister(Class> baseType, final Object nullObj, GsonBuilder gsonBuilder){

gsonBuilder.registerTypeHierarchyAdapter(baseType, new JsonDeserializer() {

@Override

public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

if(json.isJsonObject()){//是对象

Gson newGson = new Gson();

return newGson.fromJson(json,typeOfT);

}else {//不是对象,返回空对象

return (T) nullObj;

}

}

});

return gsonBuilder;

}

}

调用:

//解析数据

Class>[] baseType = new Class[]{类.class,类.class,类.class};

Object[] objects = new Object[]{new 类(),new 类(),new 类()};

Gson gson = GsonUtils.getInstance().getObjectJson(baseType,objects);

运用Gson容错机制,对此字段进行序列化判断,从而达到目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值