package com.yuyh.sprintnba.http.utils;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.yuyh.sprintnba.http.bean.match.MatchStat.MaxPlayers.MatchPlayerInfo;
import java.lang.reflect.Type;
import java.util.List;
/**
* 处理MatchStat里面出现key一样,但是value有时为对象,有时为List引起的问题(腾讯NBA的Json太多坑了)
*
* @author yuyh.
* @date 2016/7/15.
*/
public class ListDefaultAdapter implements JsonDeserializer<List<?>> {
@Override
public List<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
Gson newGson = new GsonBuilder().serializeNulls()
.registerTypeAdapter(MatchPlayerInfo.class, new MatchPlayerInfoDefaultAdapter())
.create();
String jsonStr = json.toString();
if (jsonStr.contains("\"playerStats\":{") && jsonStr.contains("\"type\":\"16\"")) {
// 不太优雅的方式,如果是160,改为160和场上球员
jsonStr = jsonStr.replace("\"type\":\"16\"", "\"type\":\"160\"")
.replace("\"playerStats\":{", "\"groundStats\":{");
}
if (json.isJsonArray()) {
return newGson.fromJson(jsonStr, typeOfT);
} else if (json.getAsString() != null && !json.getAsString().equals("")) {
String newjson = "[" + json.getAsString() + "]";
return newGson.fromJson(newjson, typeOfT);
}
} catch (Exception ignore) {
Log.e("---", ignore.toString());
}
return null;
}
}