Android学习笔记45之gson解析json

Android学习笔记45之gson解析json,第1张

概述JSON即JavaScriptObjectNatation,是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式。

JsON即JavaScript Object Natation,是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式。

JsON对象:

JsON中对象(Object)以"{"开始,以"}"结束. 对象中的每一个item都是一个key-value对,表现为"key:value"的形式,key-value对之间使用逗号分隔. 如:{"name":"coolxing","age"=24,"male":true,"address":{"street":"huiLongGuan","city":"beijing","country":"china"}}. JsON对象的key只能是string类型的,而value可以是string,number,false,true,null,Object对象甚至是array数组,也就是说可以存在嵌套的情况.

JsON数组:

JsON数组(array)以"["开始,以"]"结束,数组中的每一个元素可以是string,数组间的元素使用逗号分隔. 如["coolxing",24,{"street":"huiLongGuan","country":"china"}].

  在上一篇博文《Android学习笔记44:JSON数据解析》中,我们使用基本的JsON API完成了在服务器端创建JsON数据,以及在AndroID客户端对JsON数据进行解析。 

  其实,要创建和解析JsON数据,也可以使用GSON来完成。GSON是Google提供的用来在Java对象和JsON数据之间进行映射的java类库。使用GSON,可以很容易的将一串JsON数据转换为一个Java对象,或是将一个Java对象转换为相应的JsON数据。 

1.GSON的两个重要方法

  在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法。其中,toJson()方法用来实现将Java对象转换为相应的JsON数据,fromJson()方法则用来实现将JsON数据转换为相应的Java对象。

1.1 toJson()方法

  toJson()方法用于将Java对象转换为相应的JsON数据,主要有以下几种形式:

  (1)String toJson(JsonElement JsonElement);

  (2)String toJson(Object src);

  (3)String toJson(Object src,Type typeOfSrc);

  其中,方法(1)用于将JsonElement对象(可以是JsonObject、JsonArray等)转换成JsON数据;方法(2)用于将指定的Object对象序列化成相应的JsON数据;方法(3)用于将指定的Object对象(可以包括泛型类型)序列化成相应的JsON数据。

1.2 fromJson()方法

  fromJson()方法用于将JsON数据转换为相应的Java对象,主要有以下几种形式:

  (1)<T> T fromJson(JsonElement Json,Class<T> classOfT);

  (2)<T> T fromJson(JsonElement Json,Type typeOfT);

  (3)<T> T fromJson(JsonReader reader,Type typeOfT);

  (4)<T> T fromJson(Reader reader,Class<T> classOfT);

  (5)<T> T fromJson(Reader reader,Type typeOfT);

  (6)<T> T fromJson(String Json,Class<T> classOfT);

  (7)<T> T fromJson(String Json,Type typeOfT);

  以上的方法用于将不同形式的JsON数据解析成Java对象。

2.在服务器端生成JsON数据

  要使用GSON技术在服务器端生成JsON数据,首先需要完成以下两个准备工作。

  (1)使用MyEclipse创建了一个Web Project,这里我将该工程命名为了“GsonDemoProject”,用来模拟服务器端的Web服务。 

  (2)往该工程中导入GSON的API数据包gson-2.2.1.jar。 

  然后,我们便可以在该工程中创建一个JsonTools工具类,并实现静态方法createJsonString(),在该方法中通过使用GSON技术来生成JsON数据。该方法的具体实现如下。 

public class JsonTools {    /*     * Function : 生成JsON字符串     * Param   :  value  想要转换成JsON字符串的Object对象     * Retuen  : JsON字符串     * Author  : 博客园-依旧淡然     */    public static String createJsonString(Object value) {     Gson gson = new Gson();     String string = gson.toJson(value);     return string;    }     }

  可以看到,这个方法的具体实现非常简单,首先创建一个Gson对象,然后通过调用Gson对象的toJson()方法,将传进来的value(任意的Java对象)转换成JsON字符串即可。

  通过使用该方法,我们可以很方便的将任意Java对象传递进来,并将其转化成JsON数据。和上一篇博文中一样,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:

 /*  * Function :  获取Person对象列表  * Author  :  博客园-依旧淡然  */  public List<Person> getListPerson() {   List<Person> List = new ArrayList<Person>();   Person person = new Person(,"jack",);   Person person = new Person(,"rose","bob",);   List.add(person);   List.add(person);   List.add(person);   return List;  } 

  在该方法中,我们向List列表中加入了3个Person对象,每个Person对象具有ID(int)、name(String)和age(int)三个属性。

  最后,我们还需要创建一个继承自httpServlet的JsonAction类,并实现其中的doPost()方法,用来响应客户端对服务器的请求。具体如下:

public voID doPost(httpServletRequest request,httpServletResponse response)    throws servletexception,IOException {   response.setContentType("text/HTML;charset=utf-");   request.setCharacterEnCoding("utf-");   response.setCharacterEnCoding("utf-");   PrintWriter out = response.getWriter();   List<Person> ListPerson = JsonService.getListPerson();   String str = null;   String action_flag = request.getParameter("action_flag");   if(action_flag.equals("persons") {    str = JsonTools.createJsonString(ListPerson);   }   out.println(str);   out.flush();   out.close();  }

  在该方法中,我们通过调用JsonService类中的getListPerson()方法获得了Person对象列表ListPerson,并将其传入JsonTools.createJsonString()方法中,生成了Person对象列表的JsON数据。将该工程发布到Tomcat上,使用浏览器访问该Web工程,可以看到如图1所示的界面,Person对象列表被成功的转化成了JsON数据。


图1 生成的JsON数据

 3.在客户端解析JsON数据

  在AndroID工程中,我们可以通过httpURLConnection接口访问图1所示的URL来获得服务器上的JsON数据。

  得到JsON数据之后,便可以通过使用前面提到的fromJson()方法,将图1 所示的JsON数据还原成对应的Person对象列表了。当然了,因为这里使用到了GSON,同样需要向AndroID工程中导入gson-2.2.1.jar包。具体的实现方法如下。

 /*  * Function : 解析JsON数据,还原成Person对象列表  * Param  : JsonString   从服务器获得的Json数据  * Retuen  : Person对象列表  * Author : 博客园-依旧淡然  */  public static List<Person> getListPerson(String JsonString) {   List<Person> List = new ArrayList<Person>();   Gson gson = new Gson();   List = gson.fromJson(JsonString,new Typetoken<List<Person>>(){}.getType());   return List;  }

  可以看到,使用GSON解析JsON数据的代码实现也非常简单。其中,Typetoken是GSON提供的数据类型转换器,支持多种数据集合类型转换,其反射机制可以实现将解析出来的Java对象映射到对应的数据集合中。

  在本实例中,同样点击button按钮向服务器发送获取JsON数据的请求,从服务器获得JsON数据后,使用以上的代码完成对JsON数据的解析,最后将解析得到的Person对象依次显示在TextVIEw控件中。程序运行的结果如图2所示。

 

图2 运行结果

以上内容是小编给大家分享的AndroID学习笔记45之gson解析Json的全部叙述,希望大家喜欢。

总结

以上是内存溢出为你收集整理的Android学习笔记45之gson解析json全部内容,希望文章能够帮你解决Android学习笔记45之gson解析json所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1141444.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存