Android之Gson臟數(shù)據(jù)解析

在與后臺(tái)數(shù)據(jù)交互中,總會(huì)遇到一些后臺(tái)返回的臟數(shù)據(jù),從而在用GsonFormat生成對(duì)象時(shí)報(bào)錯(cuò)。有數(shù)據(jù)時(shí)本來字段是一個(gè)對(duì)象,沒數(shù)據(jù)時(shí)后臺(tái)PHP返回的這個(gè)字段為“”,從而導(dǎo)致了數(shù)據(jù)解析錯(cuò)誤,從而導(dǎo)致了異常。下面代碼以此記錄:

/**
* Gson解析工具類
* @param <T>
*/
public class GsonUtils<T> {
   /** GsonUtils 單實(shí)例   */
  private static GsonUtils mGsonUtils = null;

  private GsonUtils(){ }

  /**
   * 單例初始化對(duì)象
   **/
  public static GsonUtils getInstance(){
      if(mGsonUtils == null){
          synchronized (GsonUtils.class){
              if(mGsonUtils ==null) {
                  mGsonUtils = new GsonUtils();
              }
          }
      }
      return mGsonUtils;
  }

  /**
   * 獲取過濾對(duì)象的json數(shù)據(jù)
   * @param baseType  對(duì)象類資源
   * @param nullObj   空的對(duì)象數(shù)據(jù)
   * @return
   */
  public Gson getObjectJson(Class<?>[] baseType, Object[] nullObj ){
      if(baseType == null || nullObj == null){
          return new Gson();
      }
      GsonBuilder gsonBuilder = new GsonBuilder();
      //循環(huán)添加過濾條件
      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()){//是對(duì)象
                  Gson newGson = new Gson();
                  return newGson.fromJson(json,typeOfT);
              }else {//不是對(duì)象,返回空對(duì)象
                  return (T) nullObj;
              }
          }
      });
      return gsonBuilder;
  }
}

調(diào)用:

//解析數(shù)據(jù)
Class<?>[] baseType = new Class[]{類.class,類.class,類.class};
Object[] objects = new Object[]{new 類(),new 類(),new 類()};
Gson gson = GsonUtils.getInstance().getObjectJson(baseType,objects);

運(yùn)用Gson容錯(cuò)機(jī)制,對(duì)此字段進(jìn)行序列化判斷,從而達(dá)到目的。

http://www.itdecent.cn/p/3108f1e44155

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容