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

 

  其实,要创建和解析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 fromJson(JsonElement json, Class classOfT);

  (2) T fromJson(JsonElement json, Type typeOfT);

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

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

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

  (6) T fromJson(String json, Class classOfT);

  (7) T fromJson(String json, Type typeOfT);

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

 

2.在服务器端生成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;

      }

      

  }


图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对象列表
     */
    public static List getListPerson(String jsonString) {
        List list = new ArrayList();
        Gson gson = new Gson();
        list = gson.fromJson(jsonString, new TypeToken>()          
        {}.getType());
        return list;
    }

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

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