Gson之基本用法
来源:互联网 发布:数据可视化 sql 编辑:程序博客网 时间:2024/06/05 00:19
项目中,解析json数据时,一直使用Gson解析。对于Gson的基本使用没有什么问题,但并没有Gson更深入的认识。json作为主流的数据传递方式,深入理解Gson的用法还是很有必要的,那么系统的了解下Gson到底可以做什么。
2.提供已存在的不可修改对象转化为JSON以及反转化。
3.提供对象的惯例表示
4.支持任意复杂对象
5.生成健壮、可读的JSON输出
2. 泛型的引用
该如何解析上面的Json呢?个人而言,有两种思路,第一种是创建一个包含retCode、retInfo、User等字段的类, 另外一种是通过getJsonObject("User"),获取到User的json对象进行解析。第一种方法对于封装处理不好,显得繁琐,对于第二种方法,虽然封装好了,但是代码冗余。不得不承认,我习惯了第二张解析方式。偶尔翻看博客时,发现Gson解析,还可以使用泛型封装,简单粗爆啊,果断学习在案。
1.Gson的对象
Gson是google推出的的一个开源库,可以用来将Java对象转换为Json对象,当然,也可以用来将json对象转换为Java对象。2.Gson的目标
1.提供简单易用的方法比如 toString() ,构造方法来转化JAVA为JSON以及反转化。2.提供已存在的不可修改对象转化为JSON以及反转化。
3.提供对象的惯例表示
4.支持任意复杂对象
5.生成健壮、可读的JSON输出
3.JsonElement
该类是一个抽象类,代表着json串的某一个元素。这个元素可以是一个Json(JsonObject)、可以是 一个数组(JsonArray)、可以是一个Java的基本类型(JsonPrimitive)、当然也可以为null(JsonNull); JsonObject,JsonArray,JsonPrimitive,JsonNull都是JsonElement这个抽象类的子类。JsonElement提供了一系列的方法来判断当前的JsonElement是否是上述子类的一种:比如isJsonObject()用来判断当 前的json元素是否是一个数组类型4.基本用法
1. Gson提供了toJson()和fromJson()两个直接用于解析和生成的方法,前者实现序列化,后者实现反序列化。<span style="font-size:14px;"> public class User { private String userName; private int userAge; private String userEmail; } Gson gson = new Gson(); // 序列化 User user = new User("张三", 23, "男"); String jsonUser = gson.toJson(user, User.class); System.out.println("jsonUser = [" + jsonUser + "]"); // jsonUser = [{"userName":"张三","userAge":23,"userEmail":"男"}] // 反序列化 User user_ = gson.fromJson(jsonUser, User.class); System.out.println(user_.toString()); // User{userName='张三', userAge=23, userEmail='男'} // 序列化数组 String names[] = new String[]{"Teaphy", "Job", "Lous", "Flosd"}; String jsonNames = gson.toJson(names); System.out.println(jsonNames); // ["Teaphy","Job","Lous","Flosd"] // 反序列化 String[] strings = gson.fromJson(jsonNames, String[].class); System.out.println(strings.toString()); //[Teaphy, Job, Lous, Flosd] // 序列话集合 Type type = new TypeToken<ArrayList<User>>() { }.getType(); List<User> lists = new ArrayList<>(); lists.add(new User("Jso", 23, "M")); lists.add(new User("Taad", 45, "W")); lists.add(new User("Goos", 23, "M")); String jsonList = gson.toJson(lists, type); System.out.println(jsonList); // [{"userName":"Jso","userAge":23,"userEmail":"M"}, // {"userName":"Taad","userAge":45,"userEmail":"W"}, // {"userName":"Goos","userAge":23,"userEmail":"M"}] // 反序列化集合 List<User> lists_ = gson.fromJson(jsonList, type); System.out.println(lists_.toString()); // [User{userName='Jso', userAge=23, userEmail='M'}, // User{userName='Taad', userAge=45, userEmail='W'}, // User{userName='Goos', userAge=23, userEmail='M'}]</span>
2. 泛型的引用
<span style="font-size:14px;"> { "retCode": "0000", "resInfo": "成功", "User":{ "userName":"张三", "userAge":23, "userEmail":"xxx@xx.com" } }</span>
该如何解析上面的Json呢?个人而言,有两种思路,第一种是创建一个包含retCode、retInfo、User等字段的类, 另外一种是通过getJsonObject("User"),获取到User的json对象进行解析。第一种方法对于封装处理不好,显得繁琐,对于第二种方法,虽然封装好了,但是代码冗余。不得不承认,我习惯了第二张解析方式。偶尔翻看博客时,发现Gson解析,还可以使用泛型封装,简单粗爆啊,果断学习在案。
<span style="font-size:14px;"> 2.1 封装Result<>泛型类 public class Result<T> { public int code; public String message; public T data; } 2. 解析 {"retCode": "0000","resInfo": "成功","User":{ ...}} {"retCode": "0000","resInfo": "成功","Users":{ {...}...}} * 没有引入泛型以前 public class UserResult { public int code; public String message; public User data; } //========= public class UserListResult { public int code; public String message; public List<User> data; } //========= String json = "{..........}"; Gson gson = new Gson(); UserResult userResult = gson.fromJson(json,UserResult.class); User user = userResult.data; UserListResult userListResult = gson.fromJson(json,UserListResult.class); List<User> users = userListResult.data; 解析时,针对不同的情况,总是要写一不同的接口。 * 引入泛型以后 //不再重复定义Result类 Type userType = new TypeToken<Result<User>>(){}.getType(); Result<User> userResult = gson.fromJson(json,userType); User user = userResult.data; Type userListType = new TypeToken<Result<List<User>>>(){}.getType(); Result<List<User>> userListResult = gson.fromJson(json,userListType); List<User> users = userListResult.data;</span>
引入泛型以后,只需要一个接口,即可解析。
Gson博大精深,还需继续领悟啊!!!
参考资料:
1.Gson使用细节
0 0
- Gson之基本用法
- Gson的基本用法
- Gson的基本用法
- Google Gson 基本用法
- Gson基本用法
- Json、Gson的基本用法
- Gson之GsonBuilder用法笔记
- 记录下android json,Gson基本用法
- JSON教程之GSON基本解析(Gson-Java)
- JSON教程之GSON基本解析(Java-Gson)
- Gson用法
- Jquery之基本用法
- GSON基本使用
- Gson基本使用
- GSON基本应用【L】
- Gson工具 基本API
- Gson的简要用法
- Android Gson用法
- python笔记
- 消息异步处理
- iOS开发——使用代理(Delegate)实现跨界面执行跳转请求
- 简单好用的PHP分页类
- 自己给自己催眠
- Gson之基本用法
- sqlite3数据存储与读取
- 第四周13猜数字
- Exchange 2010 管理100 问第一季已经录制完毕!
- 大话设计模式-适配器模式
- IOS综合练习 通讯录 包括顺向传值,代理传值,监听,增删改,归档存储,偏好设置,画线,第三方框架
- HNUST--模的和
- Java版本微信企业号的开发--01
- UE4安卓连线调试:Segmentation fault(SIGSEGV)