Android之gson操作系列3之fromjson
来源:互联网 发布:mac系统剪切文件 编辑:程序博客网 时间:2024/05/17 23:56
Android之gson系列3之fromjson
文章链接:
知识点:
- fromJson方法的简介和使用;
- 利用JsonReader手动解析数据;
- JsonWriter生产json;
- 新名词记录(JsonReader;JsonWriter)
概述
上一篇文章讲了json的tojson序列化方法,这次我们来看下fromjson的反序列化方法。其实这里我们用的最多,至少我是。因为现在大部分的网络请求的数据都是使用json传输,但是数据来到本地,我们使用bean实体进行操作会更加方便,所以这里就需要一个反序列化的操作。gson给了我们这样一个功能函数fromjson();
首先我们来看下gson给了我们那几个重载的fromjson方法。
public <T> T fromJson(String json, Class<T> classOfT)public <T> T fromJson(String json, Type typeOfT)public <T> T fromJson(Reader json, Type typeOfT)public <T> T fromJson(JsonReader reader, Type typeOfT)public <T> T fromJson(JsonElement json, Type typeOfT)
以上几个方法的参数在上一讲都有讲过了,就不再继续讲述了,有兴趣的可以去看看http://baidi.com
我们看下怎么用,最简单的方法,前提是知道要转换的实体类的类型。如下:
String data = "{\"id\":\"11\",\"nickName\":\"tanksu\"}"; Gson gson = new Gson(); UserBean resultBean = gson.fromJson(data, UserBean.class); System.out.println("反序列化后的数据,resultBean:" + resultBean.toString()); //反序列化后的数据:{id:11, name:tanksu}
上面的方法点击去看,其实它是调用了public T fromJson(String json, Type typeOfT)方法,对于第二个参数,传入的是一个类的类型,可以使用“类的实例.getClass()”方法获取到类的类型信息。
public T fromJson(Reader json, Class classOfT)方法,此方法参数一传入Reader的子类,Reader是一个接口类。我们这里使用到StringReader子类。从源码上面看到,其实第一个讲解的方法之后还是调用了这个方法的。我们直接看代码:
StringReader stringReader = new StringReader(data); UserBean result = gson.fromJson(stringReader, UserBean.class); System.out.println("反序列化后的数据,result:" + result.toString()); //反序列化后的数据,result:{id:11, name:tanksu}
对于fromjson()方法,我们点到即止。因为Google提供的API都是很好理解的。接下来我们要看下不是那么好理解的方法,扩展一下视野。
手动解析数据
JsonReader类,继承了Closeable抽象类。Closeable用来对数据源进行关闭释放资源的抽象类。JsonReader类以流的方式读取json的编码值,并且解析json。JsonReader的操作类似于事务的处理,使用手动的方式进行数据解析,在开始beginObject()和结束endObject()的之间进行操作操作。它是依次获取到string的一个token标记(也就是key),然后通过nextXXX()方法拿到对应类型的值(也就是value)。最后我们可以将他们赋值给我们的bean实体类。其中一个用法如下:
//手动方式String data = "{\"id\":\"11\",\"nickName\":\"tanksu\"}"; UserBean userBean = new UserBean(); JsonReader jsonReader = new JsonReader(new StringReader(data)); try { jsonReader.beginObject(); while (jsonReader.hasNext()) { String str = jsonReader.nextName(); switch (str) { case "id": userBean.setId(jsonReader.nextInt()); break; case "nickName": userBean.setName(jsonReader.nextString()); break; } } } catch (IOException e) { e.printStackTrace(); } try { //最后要释放资源 jsonReader.endObject(); } catch (IOException e) { e.printStackTrace(); } System.out.println("反序列化后的数据,jsonReader:" + userBean.toString()); //反序列化后的数据,jsonReader:{id:11, name:tanksu}
其它使用
JsonWriter产生json并输出。在beginObject()之后endObject()之前进行操作。name()方法设置key,value()方法设置value。如果一个值为空,可以直接调用nullValue()方法设置值为null。如果我们在json里头生成一个list,就需要使用到beginArray()和endArray()两个方法,并且两个方法都是可以相互套用的。在反序列化中,有getJSONArray()方法获取一个jsonarray数组。和上面的beginArray()产生一个jsonarray其实是相互序列化和反序列化的动作。如果你有手动反序列化过string,比较容易懂这个了。
不多说了,我们直接看例子:
JsonWriter writer = new JsonWriter(new OutputStreamWriter(System.out)); try { writer.beginObject() .name("name").value("yaojt") .name("id").value(23) .name("sex").nullValue() //null值 .endObject(); } catch (IOException e) { e.printStackTrace(); } try { writer.flush(); } catch (IOException e) { e.printStackTrace(); } //{"name":"yaojt","id":23,"sex":null}
总结
这里的内容并不多,内容也比较简单,权当一个引导的作用,有兴趣的朋友可以深入去了解序列化和反序列化的原理。
如有任何问题,请及时与我联系,谢谢!
- Android之gson操作系列3之fromjson
- Android之gson操作系列1
- Android之Gson操作
- Android之gson操作系列2之tojson
- google gson toJson fromJson
- google gson toJson fromJson
- Gson的fromJson()方法
- Gson的fromJson()方法
- gson。fromJson方法
- android之gson解析
- Android 之 Gson 解析
- Android网络编程之操作JSON对象库-Gson
- Android:JSON 之GSON 解析
- android之GSON解析JSON
- Android JSON之GSON解析
- Android Json处理之Gson
- Android框架之Gson解析
- Android NDk开发系列之字符串操作
- listview的使用及自定义baseAdapter
- 打印
- 什么是知网小论文查重系统?
- 字符串学习
- POJ 3321 dfs序+树状数组
- Android之gson操作系列3之fromjson
- linux6
- NOIP 2009 普及组 复赛 score 分数线划定
- N×N数字
- Spring MVC接受XML格式的数据
- 用C语言实现猜数字游戏
- "List cannot be resolved to a type"错误的解决方法
- 用List模拟实现STL下的queue队列
- Matlab图像二值化