Java——json序列化與反序列化

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,參數則是泛型

分享到這裏就結束了,歡迎技術黨一起交流技術心得。

                                                                                                                 ---------------------------------------------純屬原創,不喜勿噴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章