GSON入门

一时失言乱红尘 2022-06-05 10:52 246阅读 0赞

GSON是Google开发的Java API,用于转换Java对象和Json对象。最近在项目中看到了GSON的使用,简单的一行代码,就可以将JSON数据转换为我们需要的Java对象,根本不需要繁琐地自己去解析JSON数据了。

使用GSON,首先需要加入maven以来,如下:

  1. <dependency>
  2. <groupId>com.google.code.gson</groupId>
  3. <artifactId>gson</artifactId>
  4. <version>2.6.2</version>
  5. </dependency>

下面就来看看GSON的基本用法,Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化。同时每个方法都提供了重载方法。

1. 基本数据类型的生成与解析:

  1. Gson gson = new Gson();
  2. int i = gson.fromJson("100", int.class); //100
  3. String jsonNumber = gson.toJson(100); // 100

2. POJO类的生成与解析:

  1. public class User {
  2. //省略其它
  3. public String name;
  4. public int age;
  5. public String emailAddress;
  6. }
  7. //生成JSON
  8. Gson gson = new Gson();
  9. User user = new User("xx",11);
  10. String jsonObject = gson.toJson(user); // {"name":"xx","age":11}
  11. //解析JSON
  12. Gson gson = new Gson();
  13. String jsonString = "{\"name\":\"xx\",\"age\":11}";
  14. User user = gson.fromJson(jsonString, User.class);

3. Gson中使用泛型。在我们处理数据中,往往都会有数组的情况,我们可以直接使用数组处理,也可以使用List处理。

1)数组处理比较简单,实例如下:

  1. Gson gson = new Gson();
  2. String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
  3. String[] strings = gson.fromJson(jsonArray, String[].class);

2)List处理,对于List将上面的代码中的 String[].class 直接改为 List.class 是行不通的。对于Java来说List 和List 这俩个的字节码文件只一个那就是List.class,这是Java泛型使用时要注意的问题 泛型擦除。

为了解决的上面的问题,Gson为我们提供了TypeToken来实现对泛型的支持,所以当我们希望使用将以上的数据解析为List时需要这样写。

  1. Gson gson = new Gson();
  2. String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
  3. String[] strings = gson.fromJson(jsonArray, String[].class);
  4. List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());

注:TypeToken的构造方法是protected修饰的,所以上面才会写成new TypeToken… {}.getType() 而不是 new TypeToken…().getType()

发表评论

表情:
评论列表 (有 0 条评论,246人围观)

还没有评论,来说两句吧...

相关阅读

    相关 GSON入门

        GSON是Google开发的Java API,用于转换Java对象和Json对象。最近在项目中看到了GSON的使用,简单的一行代码,就可以将JSON数据转换为我们需要

    相关 Gson使用

    (1)@SerializedName 的使用 场景:后台返回的字段 与 前端所需的字段不一致,如前端菜单控件接收的数据需要特定的字段名称 public class