当遇到如下Json同一个参数不同类型解析
正常时
{
"user": {
"id": 11,
"name": "label"
}
}
无数据时
{
"user": ""
}
解决办法
1. 与后端协商,规范数据格式,保证返回字段类型不变
当你有足够的话语权说服对方修改,建议打一顿后端,让他知耻后勇
2. 完全手动解析
try {
JSONObject jsonObject = new JSONObject(json);
if (jsonObject.get("user") instanceof String){
}else{
User user = (User) jsonObject.get("user");
}
} catch (JSONException e) {
e.printStackTrace();
}
将可能出现的类型都处理
3.JsonAdapter
在类前标注@JsonAdapter(UserDeserializer.class)
反序列化
public class UserDeserializerimplements JsonDeserializer<User> {
@Override
public Member deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonObject()){
try {
Member member = new Member();
JsonObject object = json.getAsJsonObject();
member.setId(String.valueOf(object.get("id").getAsInt()));
member.setRealName(object.get("name").getAsString());
return member;
}catch (Exception e){
return null;
}
}
return null;
}
}
正常用类解析即可