Gson简单使用
来源:互联网 发布:周杰伦 稻香 知乎 编辑:程序博客网 时间:2024/05/16 14:11
前言
本文引用你真的会用Gson吗?Gson使用指南(一)来学习,作为自己的笔记记录。
代码片段均出自以上原文
Gson是google拿来解析json的一个框架,大快人心。
首先是环境依赖:
版本可能有不同
compile 'com.google.code.gson:gson:2.7'
然后在代码里面可以直接创建一个Gson的实例,调用toJson和fromJson就可以实现相应的操作
序列化和反序列化
基本数据类型
Gson mGson=new Gson(); int i=mGson.fromJson("100",int.class); double d = mGson.fromJson("\"99.99\"", double.class); boolean b = mGson.fromJson("true", boolean.class); String str = mGson.fromJson("String", String.class); System.out.println(str);//String System.out.println(d);//99.99 System.out.println(b);//true System.out.println(i);//100
Gson gson = new Gson(); String jsonNumber = gson.toJson(100); String jsonBoolean = gson.toJson(false); String jsonString = gson.toJson("String"); System.out.println(jsonBoolean);//false System.out.println(jsonNumber);//100 System.out.println(jsonString);//"String"
可以看到,这里用toJson的方法来序列化自己的数据,用fromJson的方法来反序列化接受到的Json数据
值得注意的是,在反序列化的时候
boolean b = mGson.fromJson("true", boolean.class); System.out.println(b);//true
这里可以看出Gson具备纠错能力。
数组和List类型
Gson gson = new Gson(); String jsonArray = "[\"Android\",\"Java\",\"PHP\"]"; String[] strings=gson.fromJson(jsonArray,String[].class); System.out.println(strings[0]);//Android
Gson gson = new Gson(); String jsonArray = "[\"Android\",\"Java\",\"PHP\"]"; List<String> list=gson.fromJson(jsonArray,new TypeToken<List>(){}.getType()); System.out.println(list.get(0));//Android
因为List在增删上面更具有灵活性,所有一般会选择List来处理数组型的数据,不过可以看到,String[]可以和其他基本数据类型一样直接用String[].class作为参数传入fromJson,List则必须通过一次getType来返回Type类型的数据
查看源码可以发现,二者调用的分别是
public <T> T fromJson(String json, Class<T> classOfT)//直接用基本数据类型.classpublic <T> T fromJson(String json, Type typeOfT)//需要一个Type类型参数
而且发现 这里面是支持范型操作的 这个很重要
实体类的生成和解析
习惯上,我们喜欢用一个javaBean实体类来处理Json数据
public class User { //妈的智障java的getter和setter真是神烦啊 public String name; @SerializedName(value = "age",alternate = {"AGE","Age"}) public int age; public String emailAddress;}
Gson gson = new Gson(); User user = new User("怪盗kidou",24); String jsonObject = gson.toJson(user); System.out.println(jsonObject);//{"name":"怪盗kidou","age":24}
Gson gson = new Gson(); String jsonString = "{\"name\":\"怪盗kidou\",\"AGE\":24,\"Age\":27}"; User user = gson.fromJson(jsonString, User.class); System.out.println(user.getAge());//27
总结:
1.依然是通过toJson和fromJson来负责生成和解析。
2.本地bean类型的变量名需要和Json的节点名一致。
3.使用@SerializedName注解可以处理节点名不一致的情况。这里注明age,AGE,Age都代表age属性,多个符合注解的数据传入则取最后一个。
泛型
前面看到fromJson方法是支持泛型操作的,这里的意义在于定义本地Bean类型的时候,不需要重复定义。
还是那个例子
public class User { public String name; @SerializedName(value = "age",alternate = {"AGE","Age"}) public int age; public String emailAddress;}
现在我的emailAddress属性是一个String类型,但是如果有一天邮箱变成了很多个,这要怎么办呢
再定义一个List类型的成员变量么?
显然这里用泛型是最好的解决办法
public class UserT<T> { public String name; public int age; public T emailAddress;}
接受单个String类型的时候,一切照旧
当Json现在传递的是一个数组类型的时候,依然只需要像上面那样用一个Type类型作为参数传入fromJson就搞定,不需要反复的更改User类型,不变应万变。
Gson gson = new Gson(); String jsonString = "{\"name\":\"怪盗kidou\",\"age\":24," + "\"emailAddress\":[\"Android\",\"Java\",\"PHP\"]}"; UserT<List<String>> userT = gson.fromJson(jsonString, new TypeToken<UserT>(){}.getType()); System.out.println(userT.getEmailAddress().get(0));//Android
- Gson简单使用
- Gson简单使用
- Gson简单使用
- Gson的简单使用
- Gson的简单使用
- Gson的简单使用
- 简单的Gson使用
- Gson使用简单介绍
- Gson的简单使用
- Gson简单使用
- Gson简单使用
- Gson的简单使用
- Gson的简单使用
- Gson的简单使用
- Gson使用!如此简单!
- Gson 的简单使用
- Gson使用简单教程
- Gson 简单使用
- php判断上传图片类型是否正确
- EventBus 3.0 使用用例
- 删除数组中重复元素-Hash表方法和set方法
- Oracle rank和dense_rank排名函数
- java反射
- Gson简单使用
- J2EE面试题之同步和异步的区别?
- Appium基于安卓的各种FindElement的控件定位方法实践和建议
- Android获取设备唯一标识完美解决方案
- AbstractQueuedSynchronizer的介绍和原理分析
- UIWebView详解
- Debian 支持蓝牙音响
- 如何在linux下检测内存泄漏
- AngularJS访问服务器获取数据遍历生成表格,附Demo源码