欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android学习笔记45之gson解析json

程序员文章站 2023-12-19 10:19:22
json即javascript object natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为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, number, false, true, null, object对象甚至是array数组, 数组间的元素使用逗号分隔. 如["coolxing", 24, {"street":"huilongguan", "city":"beijing", "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", );
   person person = new person(, "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数据。

Android学习笔记45之gson解析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所示。

 Android学习笔记45之gson解析json

图2 运行结果

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

上一篇:

下一篇: