Android之gson操作系列1
来源:互联网 发布:mac 快捷键设置没有用 编辑:程序博客网 时间:2024/06/06 02:33
Android之gson操作系列1
文章链接:http://blog.csdn.net/qq_16628781/article/details/64246167
知识点:
- json的简介;
- json和XML的异同;
- gson的基本操作和@Expose注解的使用说明;
- 新名词记录{@expose,@SerializedName}
讲在前面:
讲gson之前,我觉得有必要讲一下json。JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:
对象表示为键值对
数据由逗号分隔
花括号保存对象
方括号保存数组JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值.例如,{“name”:”yaojt”}.
复杂一点,他还会包括一个list数组,例如{“people”:[{“name”:”yaojt”,”age”:24},{“name”:”tanksu”,”age”:18}]}。我们知道XML也是一种标记语言。
可读性来说:
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。
可扩展性:
XML天生有很好的扩展性,JSON当然也有,没有什么是XML可以扩展而JSON却不能扩展的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。然后再来说一下gson。gson是一个json的库,当泛型值对象T。
gson是Google推出的用来进行数据序列化和反序列化的开源框架。
同样的操作json的框架有阿里推出的fastJson,和JackJson等等。
fastJson用过,比gson要快很多,功能也扩展了不少。但是gson作为Google的“亲儿子”,我们还是需要好好的理解它,然后才能好好的使用。
示例
先贴出两个bean实体类:分别是UserBean和GsonBean。有一些需要解释的地方我就直接在类里面对应的地方做了解释,我觉得这样才比较好的,不用每次都翻上来翻上去,思路很快就被打断了。
UserBean.java
private int id;/* value是别名,alternate是备选的名字(别名),当匹配到任意一个名字时,都可以得到正确的结果 */@SerializedName(value = "nickName", alternate = {"userName"})private String name;public int getId() { return id;}public void setId(int id) { this.id = id;}public String getName() { return name;}public void setName(String name) { this.name = name;}@Overridepublic String toString() { return "{" + "id:" + id + ", name:" + name + "}";}}
GsonBean.java
@Exposeprivate long id;@Exposeprivate String userName;private String address;private Date date;private UserBean userBean;public long getId() { return id;}public void setId(long id) { this.id = id;}public String getUserName() { return userName;}public void setUserName(String userName) { this.userName = userName;}public String getAddress() { return address;}public void setAddress(String address) { this.address = address;}public Date getDate() { return date;}public void setDate(Date date) { this.date = date;}public UserBean getUserBean() { return userBean;}public void setUserBean(UserBean userBean) { this.userBean = userBean;}
写测试用例
然后及时进行写“测试用例”的时候了。我会分开每一个知识点来运行测试,力求做到知识点的最小颗粒度,方便我到时候回去看,也方便各位看官去学习。
MainGsonReflect.java
/** * gson基本操作 */public void gsonBaseOperattion() { UserBean userBean = new UserBean(); userBean.setId(10086); userBean.setName("yaojt"); Gson gson = new Gson(); String StrToJson = gson.toJson(userBean); System.out.println("序列化操作结果:" + StrToJson); //序列化操作结果:{"id":10086,"nickName":"yaojt"} UserBean userFromJson = gson.fromJson(StrToJson, UserBean.class); System.out.println("反序列化操作结果:" + userFromJson.toString()); //反序列化操作结果:{id:10086, name:yaojt}}public void gsonSandRsTest() { //基本用法 Gson gson = new Gson(); int age = gson.fromJson("99", int.class); double weight = gson.fromJson("\"99.99\"", double.class); boolean female = gson.fromJson("fales", boolean.class); String name = gson.fromJson("yaojt", String.class); UserBean userBean = new UserBean(); userBean.setId(11); userBean.setName("tanksu"); String tojsonResult = gson.toJson(userBean); System.out.println("序列化成json的结果:" + tojsonResult); //序列化成json的结果:{"id":11,"nickName":"tanksu"} String originalStr = "{id:11, nickName:yaojt's-nickName}"; UserBean fromJsonResult = gson.fromJson(originalStr, UserBean.class); System.out.println("反序列化成string的结果:" + fromJsonResult); //反序列化成string的结果:{id:11, name:yaojt's-nickName} String jsarr = "[\"yaojt\",\"tanksu\",\"fishing\"]"; //第二个参数是序列化成String[]数组 String[] strings = gson.fromJson(jsarr, String[].class); for (int i = 0, count = strings.length; i < count; i++) { System.out.println("反序列化成string数组,结果(我的所有名字结果):" + strings[i]); } /* 反序列化成string数组,结果(我的所有名字结果):yaojt 反序列化成string数组,结果(我的所有名字结果):tanksu 反序列化成string数组,结果(我的所有名字结果):fishing */}//得到userbean的类型public void gsonTypeToken() throws IOException { Type type = new TypeToken<UserBean>() { }.getType(); System.out.println("type:" + type.toString()); //type:class com.yaojt.sdk.java.gsonReflect.UserBean}/** * */public void gsonReflectTest() { GsonBuilder gsonBuilder = new GsonBuilder(); /* excludeFieldsWithoutExposeAnnotation()函数是用来指明不包括没有被Expose修饰符修饰的字段 * 如果不调用此方法,那么默认bean类里面所有的字段都会被赋值 */ gsonBuilder.excludeFieldsWithoutExposeAnnotation(); Gson gson = gsonBuilder.create(); UserBean userBean = new UserBean(); userBean.setId(1001); userBean.setName("yaojt"); GsonBean gsonBean = new GsonBean(); gsonBean.setId(12345L); gsonBean.setDate(new Date()); gsonBean.setUserName("jack"); gsonBean.setAddress("鹅岭南路"); gsonBean.setUserBean(userBean); String json = gson.toJson(gsonBean); System.out.println("序列化操作,tojson之后的数据:" + json); //序列化操作,tojson之后的数据:{"id":12345,"userName":"jack"} Gson gson1 = new Gson(); json = gson1.toJson(gsonBean); System.out.println("反序列化操作,tojson之后的数据:" + json); //反序列化操作,tojson之后的数据:{"id":12345,"userName":"jack","address":"鹅岭南路", // "date":"Mar 20, 2017 9:22:34 PM","userBean":{"id":1001,"nickName":"yaojt"}}}
}
运行测试用例
我这里用到的是IDE里的单元测试,如果大家多单元测试感兴趣的话,可以去看看这篇文章。链接[http://blog.csdn.net/qq_16628781/article/details/61202111]
@Testpublic void gsonBaseOperattionTest(){ MainGsonReflect gsonReflect = new MainGsonReflect(); gsonReflect.gsonBaseOperattion();}@Testpublic void gsonReflectTest2() { MainGsonReflect gsonReflect = new MainGsonReflect(); gsonReflect.gsonSandRsTest();}//gson反射测试@Testpublic void gsonReflectTest() { MainGsonReflect gsonReflect = new MainGsonReflect(); gsonReflect.gsonReflectTest(); try { gsonReflect.gsonTypeToken(); } catch (IOException e) { e.printStackTrace(); }}
我在这里附上运行的截图。
gsonBaseOperattionTest()
gsonReflectTest2()
gsonReflectTest()
总结
这里主要讲了json的概念,json和XML的区别,还有就是gson的基本操作。内容不难,一看就懂了。后面我会深入的去讲关于gson的一些操作。例如我们自定义解析过程,@expose,@SerializedName等注解的使用。
如有任何问题,请及时与我联系。谢谢!
- Android之gson操作系列1
- Android之gson操作系列2之tojson
- Android之gson操作系列3之fromjson
- Android之Gson操作
- Android网络编程之操作JSON对象库-Gson
- android之gson解析
- Android 之 Gson 解析
- 快速Android开发系列网络篇之Retrofit, Retrofit OKHttp GSON
- Android:JSON 之GSON 解析
- android之GSON解析JSON
- Android JSON之GSON解析
- Android Json处理之Gson
- Android框架之Gson解析
- android Gson解析1
- Gson系列
- Android NDk开发系列之字符串操作
- Gson操作
- Gson 操作
- Python list.sort 与sorted
- 第二章 复杂的HTML解析
- java文件拷贝---将一个相册拷贝到另一个相册
- Android 默认分享 Intent设置类型setType();
- jQuery学习四-过滤选择器
- Android之gson操作系列1
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- oracle 性能优化建议小结
- gson-typeadapter
- ARM Linux 3.x的设备树(Device Tree)
- 杭电--1018 Big Number
- 2016年5月-软件创新大赛项目
- Python--help方法
- 02-线性结构1 两个有序链表序列的合并【链表】