美文网首页
Android之Gson脏数据解析

Android之Gson脏数据解析

作者: xiao波 | 来源:发表于2020-05-30 16:41 被阅读0次

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

/**
* Gson解析工具类
* @param <T>
*/
public class GsonUtils<T> {
   /** 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<T>() {
          @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容错机制,对此字段进行序列化判断,从而达到目的。

https://www.jianshu.com/p/3108f1e44155

相关文章

网友评论

      本文标题:Android之Gson脏数据解析

      本文链接:https://www.haomeiwen.com/subject/bqfhzhtx.html