淘先锋技术网

首页 1 2 3 4 5 6 7

Java技术交流群:817997079,欢迎“有志之士”的加入。

阿里云服务器优惠链接:https://www.aliyun.com/minisite/goods?userCode=epd6ezxj

目前数据交互中最常用的数据交互格式莫过于json了,那么在java开发中经常会遇到json的序列化与反序列化,常用的json序列化工具有阿里的Fastjson、spring mvc内置的Jackson、还有就是我们接下来要说的谷歌的Gson。

GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。

     Gson特点:1:面向对象;2:简洁高效;3:数据传递和解析方便

下面介绍一下Gson的常用方法

首先贴一下我用来做示例的实体类Test的代码,如下:

public class Test {
    /* 姓名*/
    private String name;
    /* 性别*/
    private String sex;
    /* 年龄*/
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "StudentEntity{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }

    public Test(String name, String sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

1.gson.tojso();//形参为要序列化的json串

方法作用:把实体对象转换为json(序列化)

public static void main(String[] args) {
       //创建实体类
      Test test = new Test("序列化", "男", 25);
      //实例化Gson
      Gson gson = new Gson();
      //把对象序列化为json
      String s = gson.toJson(test);
      //输出---序列化后的结果为:{"name":"序列化","sex":"男","age":25}
      System.out.println("序列化后的结果为:"+s);
      //定义List集合
      List<Test> tests = new ArrayList<>();
      tests.add(test);
      String s1 = gson.toJson(tests);
      //输出---List集合序列化后的结果为:[{"name":"序列化","sex":"男","age":25}]
      System.out.println("List集合序列化后的结果为:"+s1);
      Map<String, Test> testMap = new HashMap<>();
      testMap.put("序列化测试",test);
      //输出--Map集合序列化后的结果为:{序列化测试=StudentEntity{name='序列化', sex='男', age=25}}
      System.out.println("Map集合序列化后的结果为:"+testMap);
}

2.gson.fromJson();

方法作用:

(1)把json转换为List对象(反序列化)

public static void main(String[] args) {
      // 定义json
      String json = "[{\"name\":\"转换对象\",\"sex\":\"女\",\"age\":20}]";
      //实例化Gson
      Gson gson = new Gson();
      //把json序列化为List对象
      List<Test> o = gson.fromJson(json, new TypeToken<List<Test>>() {
      }.getType());
      //输出---序列化后的结果为:[StudentEntity{name='转换对象', sex='女', age=20}]
      System.out.println("反序列化成List后的结果为:"+o.toString());
  }

(2)把json转换为Map对象(反序列化)

public static void main(String[] args) {
      //实例化Gson
      Gson gson = new Gson();
      //定义json
      String jsonMap = "{'序列化测试':{name='序列化', sex='男', age=25}}";
      //把json序列化为Map对象
      HashMap<String,Test> o1 = gson.fromJson(jsonMap, new TypeToken<HashMap<String,Test>>() {
      }.getType());
      //输出---{序列化测试=StudentEntity{name='序列化', sex='男', age=25}}
      System.out.println("反序列化成Map后的结果为:"+o1);
  }

(3)把json转换为实体对象(反序列化)

public static void main(String[] args) {
      // 定义json
      String json = "{\"name\":\"转换对象\",\"sex\":\"女\",\"age\":20}";
      //实例化Gson
      Gson gson = new Gson();
      //把json序列化为实体类(Test)对象
      Test test = gson.fromJson(json, Test.class);
      //输出---反序列化后的结果为:StudentEntity{name='转换对象', sex='女', age=20}
      System.out.println("反序列化成实体类后的结果为:"+test.toString());
  }

划重点--------------------------------------------------------------------------------------

一、把实体类序列化为json时,如果实体类某个属性的值为null,gson在序列化该对象是则默认过滤掉该属性,该属性不会参与序列化。

二、反序列化时需注意json串的格式,如果是数组则最外层是用‘[ ]’来包括的,如果是对象或者是Map则是用‘{ }’来包括的,根据需要反序列化的json格式来选定需要反序列化用的方法gson.fromJson()应该传递哪种参数,反序列化成对象参数应该是这个对象的反射(entity.Class),如果是List或者是Map,参数则是泛型

分享到这里就结束了,欢迎技术党一起交流技术心得。

                                                                                                                 ---------------------------------------------纯属原创,不喜勿喷。