GSON在项目中的使用
2015-08-20 18:10
585 查看
前言:很早就想写这篇博客;因为懒惰,一直没发。
google 提供的Gson既可以把实体类转换为json字符串,也可以把json字符串转换为实体类。今天就介绍一下在项目中经常用的的JSON解析,摆脱逐个字段解析Json的麻烦。
制定规则
所谓制度规则,就是让服务端返回的json格式遵循一定的规则,本在项目中经常按如下格式让服务端返回json格式:{“code”:”“,”message”:”“,”data”:{}}
code: 是返回的标志;
message:是返回的提示信息。
data:返回的数据源,data才是每个接口说真正需要的数据。
用实体类来实现既定的规则
基础的实体类,包含code,message字段和动态的data(用泛型来实现动态赋值)
3.模拟服务端封装json
生成后json ;json1 = {“code”:200,”message”:”i am area”,”data”:{“mId”:11,”mName”:”II”,”mParentId”:21}}
json2 = {“code”:200,”message”:”i am user”,”data”:{“uId”:22,”phone”:”1344345454234”,”pass”:”123456”,”confirmPass”:”123456”,”type”:0}}
{“key1”:”hello1”,”key2”:”hello2”,”key3”:”hello3”}
4.解析JSON
这样就可以把JSON字符串解析成对应的对象。
5.复杂的json解析
json都是由json数组和json对象所组成的。复杂的json无非就是多几个json对象json数组,多嵌套几成而已,下面就来做几个事例。
google 提供的Gson既可以把实体类转换为json字符串,也可以把json字符串转换为实体类。今天就介绍一下在项目中经常用的的JSON解析,摆脱逐个字段解析Json的麻烦。
制定规则
所谓制度规则,就是让服务端返回的json格式遵循一定的规则,本在项目中经常按如下格式让服务端返回json格式:{“code”:”“,”message”:”“,”data”:{}}
code: 是返回的标志;
message:是返回的提示信息。
data:返回的数据源,data才是每个接口说真正需要的数据。
用实体类来实现既定的规则
基础的实体类,包含code,message字段和动态的data(用泛型来实现动态赋值)
package com.gson.bean; import java.io.Serializable; public class JsonParserBase<T> implements Serializable { 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; } @Override public String toString() { return "JsonParserBase
普通实体类User和Area
[code]package com.gson.bean;
public class User {
private int uId;// 用户ID
private String phone;// 账号
private String pass;// 密码
private String newPass;// 新密码
private String confirmPass; // 确认密码
private String point;// 积分
private int type;// 1是注册 2是找回密码
public String getPoint() {
return point;
}
public void setPoint(String point) {
this.point = point;
}
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getNewPass() {
return newPass;
}
public void setNewPass(String newPass) {
this.newPass = newPass;
}
public String getConfirmPass() {
return confirmPass;
}
public void setConfirmPass(String confirmPass) {
this.confirmPass = confirmPass;
}
}
package com.gson.bean;
import java.io.Serializable;
public class Area implements Serializable {
private int mId;
private String mName;
private int mParentId;
private String path;
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public int getmId() {
return mId;
}
public void setmId(int mId) {
this.mId = mId;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public int getmParentId() {
return mParentId;
}
public void setmParentId(int mParentId) {
this.mParentId = mParentId;
}
}
3.模拟服务端封装json
package com.gson; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.gson.bean.Area; import com.gson.bean.JsonParserBase; import java.lang.reflect.Type; /** * @desc GSON 解析的封装 * @creator caozhiqing * @data 2015/8/20 */ public class ParserUtil { private static Gson gson = new Gson(); /** * 最基础的json解析 * @param json 要解析的json字符串 * @param type 对应的类型 *< d0c2 span class="hljs-javadoctag"> @param <T> * @return */ private static <T extends Object> T fromJson(String json,Type type){ if(json == null || "".equalsIgnoreCase(json) || type == null){ return null; } System.out.println("json =" + json); if(gson == null){ gson = new Gson(); } T returnResult = gson.fromJson(json, type); return returnResult; } /** * 专为JsonParserBase设计解析 * @param json * @param type * @param <T> * @return */ public static <T extends Object> JsonParserBase<T> fromJsonBase(String json,Type type){ JsonParserBase<T> returnResult = fromJson(json, type); return returnResult; } public static void main(String[] arg){ /*****生成json****/ Area area = new Area(); area.setmName("II"); area.setmId(11); area.setmParentId(21); JsonParserBase<Area> jsonParserBase = new JsonParserBase<Area>();//泛型生成Area的数据 jsonParserBase.setMessage("i am area"); jsonParserBase.setCode(200); jsonParserBase.setData(area); String json1 = gson.toJson(jsonParserBase); System.out.println(json1); User user = new User(); user.setuId(22); user.setConfirmPass("123456"); user.setPass("123456"); user.setPhone("1344345454234"); JsonParserBase<User> jsonParserBase1 = new JsonParserBase<User>();//泛型生成Area的数据 jsonParserBase1.setMessage("i am user"); jsonParserBase1.setCode(200); jsonParserBase1.setData(user); String json2 = gson.toJson(jsonParserBase1); System.out.println(json2); //当字段不多,不想创建实体类,可有map构建 LinkedTreeMap<String,String> map = new LinkedTreeMap<String, String>(); map.put("key1","hello1"); map.put("key2","hello2"); map.put("key3", "hello3"); System.out.println(gson.toJson(map)); /*****生成json****/ /*****解析json****/ JsonParserBase<Area> areaJsonParserBase = fromJsonBase(json1, new TypeToken<JsonParserBase<Area>>() { }.getType()); System.out.println(areaJsonParserBase.getMessage()); System.out.println(areaJsonParserBase.getData().getmName()); System.out.println(areaJsonParserBase.getData().getmId()); JsonParserBase<User> userJsonParserBase = fromJsonBase(json2, new TypeToken<JsonParserBase<User>>() { }.getType()); System.out.println(userJsonParserBase.getMessage()); System.out.println(userJsonParserBase.getData().getPass()); System.out.println(userJsonParserBase.getData().getConfirmPass()); LinkedTreeMap<String, String> map1 = fromJson(json3, new TypeToken<LinkedTreeMap<String, String>>() { }.getType()); System.out.println(map1.get("key1") + " " + map1.get("key2") + " " + map1.get("key3")); /*****解析json****/ } }
生成后json ;json1 = {“code”:200,”message”:”i am area”,”data”:{“mId”:11,”mName”:”II”,”mParentId”:21}}
json2 = {“code”:200,”message”:”i am user”,”data”:{“uId”:22,”phone”:”1344345454234”,”pass”:”123456”,”confirmPass”:”123456”,”type”:0}}
{“key1”:”hello1”,”key2”:”hello2”,”key3”:”hello3”}
4.解析JSON
/*****解析json****/ JsonParserBase<Area> areaJsonParserBase = fromJsonBase(json1, new TypeToken<JsonParserBase<Area>>() { }.getType()); System.out.println(areaJsonParserBase.getMessage()); System.out.println(areaJsonParserBase.getData().getmName()); System.out.println(areaJsonParserBase.getData().getmId()); JsonParserBase<User> userJsonParserBase = fromJsonBase(json2, new TypeToken<JsonParserBase<User>>() { }.getType()); System.out.println(userJsonParserBase.getMessage()); System.out.println(userJsonParserBase.getData().getPass()); System.out.println(userJsonParserBase.getData().getConfirmPass()); LinkedTreeMap<String, String> map1 = fromJson(json3, new TypeToken<LinkedTreeMap<String, String>>() { }.getType()); System.out.println(map1.get("key1") + " " + map1.get("key2") + " " + map1.get("key3")); /*****解析json****/
这样就可以把JSON字符串解析成对应的对象。
5.复杂的json解析
json都是由json数组和json对象所组成的。复杂的json无非就是多几个json对象json数组,多嵌套几成而已,下面就来做几个事例。
相关文章推荐
- Gson.toJson()时内存溢出StackOverflowError
- XML 与 JSON 优劣对比
- newtonsoft.json解析天气数据出错解决方法
- vbs 解析json jsonp的方法
- C#实现将类的内容写成JSON格式字符串的方法
- jquery JSON的解析方式示例介绍
- c#版json数据解析示例分享
- ASP JSON类文件的使用方法
- C#实现对Json字符串处理实例
- C#实现Json转Unicode的方法
- php解析json数据实例
- PHP6 先修班 JSON实例代码
- 关于JSON以及JSON在PHP中的应用技巧
- .Net中的json操作类用法分析
- JavaScript中字符串(string)转json的2种方法
- js Object2String方便查看js对象内容
- C#中的DataSet、string、DataTable、对象转换成Json的实现代码
- Json实现异步请求提交评论无需跳转其他页面
- javascript中JSON对象与JSON字符串相互转换实例
- javascript格式化json显示实例分析