探究Gson轉對象

一、Gson簡介

Gson是Google提供的用來轉換Java對象與JSON數據格式的Java類庫。它可以將JSON數據轉換為Java對象,也可以將Java對象轉換為JSON數據。Gson的作用類似於Java中的序列化和反序列化。

Gson提供了簡單易用的API來實現JSON數據的序列化和反序列化,同時也提供了高級功能,如通過註解自定義序列化和反序列化,以及通過TypeAdapter在某些場景下更精細地控制序列化和反序列化過程。

二、Gson基本用法

使用Gson將Java對象轉換為JSON數據格式的代碼如下:

Gson gson = new Gson();
String json = gson.toJson(object); //object為待轉換的Java對象

將JSON數據格式轉化為Java對象的代碼如下:

Gson gson = new Gson();
Object object = gson.fromJson(json, Object.class); //json為待轉換的JSON數據

其中,Gson提供了很多toJson()和fromJson()的重載方法,可以根據不同的需求進行轉換。例如,toJson()方法還可以接受一個Writer對象,用於將JSON數據格式輸出到文件或網路流中。

三、Gson註解

使用註解可以更精細地控制Gson的序列化和反序列化過程。Gson提供了以下注解:

  • @SerializedName:用於將Java對象的欄位名與JSON中的欄位名相對應。
  • @Expose:用於標識哪些Java對象的欄位需要進行序列化和反序列化。
  • @JsonAdapter:用於指定通過TypeAdapter自定義的序列化和反序列化方式。

舉個例子,下面是一個使用@SerializedName註解的示例:

public class Person {
  @SerializedName("name")
  private String mName;
  @SerializedName("age")
  private int mAge;
}

在這個示例中,Person類中的成員變數mName和mAge分別對應JSON格式中的”name”和”age”欄位。

四、Gson TypeAdapter

有時候,在處理JSON格式數據時,我們需要針對某些數據類型進行更加細緻的轉換。例如,Gson默認將Date類型轉換為毫秒數,而我們可能需要將其轉換為指定的日期格式。這時候,我們可以使用TypeAdapter來自定義轉換方式。

下面是一個使用TypeAdapter自定義轉換Long型時間戳為Java Date類型的示例:

public class DateTypeAdapter extends TypeAdapter {
 
  @Override
  public void write(JsonWriter out, Date value) throws IOException {
    if (value == null) {
      out.nullValue();
      return;
    }
    out.value(value.getTime());
  }
 
  @Override
  public Date read(JsonReader in) throws IOException {
    if (in.peek() == JsonToken.NULL) {
      in.nextNull();
      return null;
    }
    return new Date(in.nextLong());
  }
}

以上代碼定義了一個名為DateTypeAdapter的TypeAdapter,實現了將Java Date類型轉換為Long型時間戳的功能。

下面是一個使用自定義TypeAdapter的示例:

public class Person {
  private String mName;
  @JsonAdapter(DateTypeAdapter.class)
  private Date mBirthday;
}

在這個示例中,Person類中的mBirthday欄位通過@JsonAdapter註解指定了DateTypeAdapter作為轉換方式。

五、Gson高級用法

除上面說到的基礎功能和註解功能外,Gson還提供了很多高級用法,如泛型支持、json轉換Promise、支持自定義Instance Creators等。

關於Gson的更多高級用法,可以查看官方文檔。

六、總結

本文從Gson的基本用法、註解、TypeAdapter和高級用法四個方面對Gson進行了詳細的介紹。其中,註解和TypeAdapter可以幫助我們更精細地控制Gson的序列化和反序列化過程,而高級用法則可以滿足一些更為複雜的需求。

原創文章,作者:FMYKX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334273.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FMYKX的頭像FMYKX
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • 面向對象編程、類和對象

    面向對象編程(Object-Oriented Programming, OOP)是一種編程方法,它將現實世界中的事物抽象為對象(Object),對象的屬性和方法被封裝成類(Clas…

    編程 2025-04-29
  • Mapster:一個高性能的對象映射庫

    本文將深入介紹furion.extras.objectmapper.mapster,一個高性能的對象映射庫,解釋它是如何工作的以及如何在你的項目中使用它。 一、輕鬆地實現對象之間的…

    編程 2025-04-28
  • Python返回對象類型

    Python是一種動態、解釋型、高級編程語言。Python是一種面向對象的語言,即所有的一切都是一個對象。 一、基本類型 Python中的基本類型有整數int、浮點數float、布…

    編程 2025-04-28
  • Python中通過對象不能調用類方法和靜態方法的解析

    當我們在使用Python編寫程序時,可能會遇到通過對象調用類方法和靜態方法失敗的問題,那麼這是為什麼呢?接下來,我們將從多個方面對這個問題進行詳細解析。 一、類方法和靜態方法的定義…

    編程 2025-04-27
  • Python內置函數——查看對象內存

    本文將介紹Python內置函數中,在開發中查看對象內存的相關函數。 一、id()函數 id()函數是Python內置函數,用於返回對象的唯一標識符,也就是對象在內存中的地址。 nu…

    編程 2025-04-27
  • 解決ERP運行時錯誤429:ActiveX不能創建對象 DAO350

    ERP運行時錯誤429是由於「ActiveX不能創建對象」而引發的。這種錯誤通常是由於您在嘗試訪問Microsoft Access資料庫時缺少了必要的組件。 一、安裝並註冊DAO庫…

    編程 2025-04-27
  • forof遍歷對象的詳細闡述

    forof是一種ES6的語法糖,用於遍歷可迭代對象。相較於傳統的for循環和forEach方法,forof更加簡潔、易讀,並且可以遍歷各種類型的數據。 一、基本語法 forof的基…

    編程 2025-04-25
  • Vue數組添加對象詳解

    在Vue框架下,我們經常需要用到對數組添加新的對象的功能,在本篇文章中,我們將從以下幾個方面對Vue數組添加對象做詳盡的說明。 一、通過unshift和push方法添加對象 Vue…

    編程 2025-04-25
  • JavaScript創建對象的幾種方式詳解

    JavaScript是一門用於在網頁上實現動態交互效果的編程語言,對於前端開發而言,掌握JavaScript創建對象的幾種方式是必備技能之一。在本文中,我們將從多個方面詳細闡述Ja…

    編程 2025-04-24
  • JS對象的深拷貝與淺拷貝

    一、深拷貝與淺拷貝的概念 在進行JavaScript編程過程中,經常會涉及到對象的拷貝操作。對象的拷貝分為淺拷貝和深拷貝兩種方式。 淺拷貝是指將一個對象複製到另一個對象,產生一個新…

    編程 2025-04-24

發表回復

登錄後才能評論