https://blog.csdn.net/u011082160/article/details/92424436
案例一:
以我实际开发遇到的问题举例:
public class BaseResponseBean {
public String code;
public String msg;
//由于不同的情况返回的类型不一样,所以只能用Object接收
public Object result;
@Override
public String toString() {
return "BaseReadCarStateResponseBean{" +
"code='" + code + '\'' +
", msg='" + msg + '\'' +
", result=" + result +
'}';
}
}
对于result字段,某种类型的失败会返回一个String类型的错误描述字符串,正常解析可能是RemoteControlContent类型。如果我将BaseResponseBean中的result定义成RemoteControlContent类型,如果发生错误就会造成类型转换错误。
所以我又定义了一个BaseRemoteControlResponseBean类:
public class BaseRemoteControlResponseBean{
public String code;
public String msg;
public RemoteControlContent result;
@Override
public String toString() {
return "BaseRemoteControlResponseBean{" +
"code='" + code + '\'' +
", msg='" + msg + '\'' +
", result=" + result +
'}';
}
}
然后解析json的时候,用google自带的Json解析类JsonObject判断一下result字段的类型,对于不同类型的result,则解析成不同的实体。
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json);
if (element.isJsonObject()) {//假设最外层是object
// 把JsonElement对象转换成JsonObject
JsonObject JsonObject = element.getAsJsonObject();
JsonElement jsonElement = JsonObject.get("result");
if (jsonElement == null || jsonElement.isJsonNull() || jsonElement.isJsonPrimitive()) {
BaseResponseBean baseResponseBean = GsonUtil.gson.fromJson(json, BaseResponseBean.class);
httpResultHandler.onFailure(requestPageFlag,requestCode,baseResponseBean.code,baseResponseBean.msg + "&" + baseResponseBean.result);
} else if (jsonElement.isJsonObject()) {
BaseRemoteControlResponseBean baseHttpResultBean = GsonUtil.gson.fromJson(json, BaseRemoteControlResponseBean.class);
httpResultHandler.onSuccess(requestPageFlag,requestCode, baseHttpResultBean);
}
}
案例二:
有这样一串json:
{"content":"","msgType":"运营消息推送(纯文本)","msgTypeCode":"M004","popType":0,"title":"运营消息推送(纯文本)","userDef":{"content":"不思量,自难相忘"}}
不同的msgType对应着不同的userDef结构,这时就需要将msgTypeCode、userDef单独取出来再解析。
String tspMessage = new String(gtTransmitMessage.getPayload());
LogUtils.d(TAG, "tspMessage:" + tspMessage);
JsonElement jsonElement = JsonParser.parseString(tspMessage);
JsonObject asJsonObject = jsonElement.getAsJsonObject();
JsonElement msgTypeCodeJE = asJsonObject.get("msgTypeCode");
if (null == msgTypeCodeJE) {
LogUtils.e(TAG, "不认识的消息:" + tspMessage);
return;
}
String msgTypeCode = msgTypeCodeJE.toString();
定义结构的时候可以将userDef定义成泛型,然后不同的msgTypeCode创建解析成不同的实现类即可。
0 条评论