Gson框架小结
来源:互联网 发布:韩磊花房姑娘知乎 编辑:程序博客网 时间:2024/06/08 07:24
使用Gson解析JSON数据必须先在工程中添加依赖
compile 'com.google.code.gson:gson:2.6.2'
添加完之后,sync 之后,Android Studio会自动下载Gson的jar包一、Gson的基本用法
在讲这个之前,我们先来了解一下Gson的几个类:
JsonElement
这是Json中元素的基类,它只提供了若干个类型判断的接口,简单判断这个Json元素的类型。以下几个类型都是它的子类。
1、JsonObject:包含多个JsonElement集合,每一个Json字符串的根节点都是一个JsonObject
{
“name”:“张三”,
“age”:“29”,
“grade”:{
“语文”:“88”,
“数学”:“98”
}
}
2、JsonArray:也表示JsonElement的集合,Json中的数组并不要求所有的数据类型都一样。
从集合角度来讲,JsonObject中的JsonElement是无序的,需通过键值对访问,而JsonArray中的集合元素是有序的,可通过下标访问
[“a”,“b”,true]
3、JsonPrimitive:这个比较有趣,可以将json数据中双引号解析出来
4、JsonNull:空,对应null
下面直接上代码:
Person.java
public class Person { int age; String name; public Person() { } public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
功能代码:
<span style="white-space:pre"></span>// Gson实例化,这只是其中一种创建方式,另一种在下面会讲到 Gson gson = new Gson(); /* javabean(对象)转换json字符串 */ Person person1 = new Person(12,"张三"); String jsonStr1 = gson.toJson(person1); Log.i("javabean转换json字符串 ---> ",jsonStr1); /* json字符串转javabean(对象) */ String jsonStr2 = "{\"name\":\"李四\",\"age\":26}"; Person person2 = gson.fromJson(jsonStr2,Person.class); Log.i("json字符串转javabea ---> ",person2.toString()); /* List Map 转json字符串 */ List<String> list = Arrays.asList("1", "a", "3", "rt", "5"); Log.i("List 转json字符串 ---> ",gson.toJson(list)); Map<String,Object> map = new HashMap<>(); map.put("name","张三"); map.put("age","26"); Log.i("Map 转json字符串 ---> ",gson.toJson(map)); /* json字符串转List */ String jsonStr3 = "[\"1\",\"a\",\"3\",\"rt\",\"5\"]"; Type type = new TypeToken<ArrayList<String>>(){}.getType(); ArrayList<String> slist = gson.fromJson(jsonStr3,type); Log.i("json字符串转Lis ---> ",slist.toString()); /* * JsonObject JsonArray */ // 创建JsonObject,通过addPropert(key,value)可以向jsonObject中添加字段,跟Map相似 JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("name","张三"); jsonObject.addProperty("age","26"); Log.i("create JsonObject ---> ",jsonObject.getAsString()); // 创建JsonArray JsonArray jsonArray = new JsonArray(); jsonArray.add("摄影"); jsonArray.add("爬山"); jsonArray.add("钓鱼"); Log.i("create JsonArray ---> ",jsonArray.getAsString()); // JsonObject中嵌套JsonArray jsonObject.add("hobby",jsonArray); Log.i("JsonArray in JsonObject",jsonObject.getAsString()); /* * JsonPrimitive类可以获得json字符串中引号 */ String jsonStr4 = "{\"name\":\"xuanyouwu\",\"age\":26}"; JsonPrimitive jsonPrimitive = new JsonPrimitive(jsonStr4); Log.i("toString() ---> ",jsonPrimitive.toString()); Log.i("getAsString() ---> ",jsonPrimitive.getAsString());
二、Gson注解
有时候,我们不需要对json数据全部输出,或者要对其版本进行控制……这个时候就需要注解了。。
1、@Expose
区别实体中是否允许被序列化化,本身有两个属性deserialize(反序列化)和serialize(序列化),默认为true。如果将其设置为false的话,表示这一属性在(反)序列化的过程中不需要处理。实体中没有@Expose注解的属性在创建Gson对象时不会被序列化
其中有一点比较蛋疼的是,举个例子,当我们希望10个属性中,第5个属性不被序列化,一般思维是把第5个属性的注解去掉就行,但这行不通,我们需要将10个属性都加上注解,并将第5个的注解设置为false。
2、@SerializedName(重命名注解)
有时候,我们从服务器上获取的json数据,其key值必须跟我们实体中的字段名称相同,但如果服务器返回来的关键字,如int,switch这一些怎么办,我们在java中是不能定义这些字段的,或者服务器返回的字段太长…… 这个时候就得用SerializedName了。。
定义属性序列化后的名称,在序列化时,JsonElement的键值会被替换成这个名字;解析时,Json中键值为这个名字的JsonElement会赋值给被注解的属性。
<span style="white-space:pre"></span>String name;<span style="white-space:pre"></span>int age;<span style="white-space:pre"></span>@SerializedName("new")<span style="white-space:pre"></span>int isnew;
结合alternate提供多种备用字段key来解析,@SerializedName(value=“desc”,alternate={“other”,“another”}),如果json中有other或another就会被解析成desc,所以value的值不能出现在alternate中,alternate是备选字段来的。
3、@Since和@Until
对实体(反)序列化时的版本控制,不小于Since的版本,不大于Until的版本,两个刚好是相反的意思。
- Gson框架小结
- gson常用用法小结
- Google Gson使用小结
- Gson简易使用小结
- gson常用用法小结
- gson使用小结
- gson常用用法小结
- Gson解析框架
- gson 框架使用
- gson框架的使用
- Android Gson框架使用
- volly框架——Gson
- Volley+OkHttp+Gson自定义框架
- Android框架之Gson解析
- JSON小小结 - - - jackson, gson, json-lib
- gson框架配合xUtils框架解析
- 从服务端加载图片(Volley框架+Gson框架+PullToRefresh框架)
- 【优秀框架记录】 json解析:GSON
- webrtc简单介绍以及用法(native)
- CWinApp的构造函数(摸索)
- 进程通信之共享内存
- 交叉编译
- StringBuilder和StringBuffer的区别
- Gson框架小结
- hibernate.cfg.xml或JPA persistence.xml中must end with the ';' delimiter问题
- ”您的应用签名算法采用“SHA256withRSA”,在部分4.2一下安卓版本的手机上不能安装的解决方案
- adb shell 中直接激活界面命令
- Git工作的一般流程
- UIWebView与js交互
- Android 接口回调 简单Demo
- TI 硬件SPI调试
- AssetHandler