json 解析
我个人项目的是这样处理的
利用gson等注解式框架
符合程序员偷懒原则
首先引入了一个泛型类,T 你可以是整个整体OBject,也可以是List 中的子对象。
BaseResult 是定义了一些模板的属性,再配合泛型,有了它避免再定义一些重复的代码字段
public class BaseResult<T> implements Serializable{
public static final int RESULT_SUCCESS = 0;
private int code;
private String message;
private T data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public boolean isOk() {
return code == RESULT_SUCCESS;
}
}
如何使用
- 第一种
比如你有CourseInfo对象
BaseResult<CourseInfo> courseInfoBaseResult = AppContext.createGson().fromJson(response,
new TypeToken<BaseResult<CourseInfo>>() {}.getType());
- 第二种
BaseResult courseInfoBaseResult = AppContext.createGson().fromJson(response,BaseResult.class);
手动解析
比如有个String json字符串。
先利用JsonParser将json转成JsonObject,然后通过它的get("字段名””)转成你想要的的类型。
优点:不用再额外加个类,适用于获取小部分解析数据
JsonObject jsonObject = (JsonObject) new JsonParser().parse(tipContent);
if (jsonObject != null) {
JsonElement mcontent = jsonObject.get("mcontent");
JsonElement serv_info1 = jsonObject.get("serv_info");
if (mcontent != null) {
tipContent = mcontent.getAsString();
} else if
(serv_info1 != null) {
JsonObject asJsonObject = serv_info1.getAsJsonObject();
tipContent = asJsonObject.get("msg").getAsString();
String serv_name = asJsonObject.get("serv_name").getAsString();
tipContent = String.format("服务器%s%s", serv_name, tipContent);
}
}
}