JacksonJson轉對象詳解

一、Jackson對複雜對象的轉換

Jackson是一個高效的json轉換庫,可以將json數據轉換成java對象,同時也支持將java對象轉換成json數據。對於複雜的對象轉換,Jackson也提供了很好的支持。以下是一個示例代碼:

public class User {
    private String name;
    private int age;
    private Address address;
    // getter and setter...
}

public class Address {
    private String city;
    private String street;
    // getter and setter...
}

// json字符串
String json = "{\"name\":\"John\",\"age\":25,\"address\":{\"city\":\"New York\",\"street\":\"Wall Street\"}}";

// json轉換成java對象
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);

// java對象轉換成json
String jsonString = objectMapper.writeValueAsString(user);

上述代碼演示了Json字符串和Java對象之間的相互轉換。通過ObjectMapper.readValue方法,可以將json字符串轉換成對應的Java對象。其中,Address屬性是一個嵌套對象,在轉換時需要另外定義一個Address類。

二、Jackson和Gson

Jackson和Gson是兩個著名的Java Json轉換庫。它們都提供了很好的json轉換功能,但是在某些特定情況下可能會表現出不同的特點。

Jackson曾經因為其高性能而成為很多企業的首選,但是在某些業務場景下可能會出現一些問題。比如,它可能在某些嵌套json數據的解析過程中,會出現類型不匹配的問題。

Gson則相對來說更加靈活,它會自動處理封裝類型、基本類型和List操作,但是其性能相對較低。以下是一個示例代碼:

// Gson示例代碼
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);

String jsonString = gson.toJson(user);

在Gson中,可以直接使用Gson類中的fromJson和toJson方法來進行json數據的轉換,與Jackson相比,其代碼實現更加簡單。但是,如果json數據的複雜度比較高,Gson可能會出現無法解析的情況。

三、Jackson把枚舉轉成對象

Jackson可以將枚舉類型轉換成對象,這在實際開發中非常有用。以下是一個示例代碼:

public enum SexEnum {
    MALE("男"),
    FEMALE("女");

    private String sex;

    SexEnum(String sex) {
        this.sex = sex;
    }

    public String getSex() {
        return sex;
    }
}

public class Person {
    private String name;
    private int age;
    private SexEnum sex;
}

// Person對象轉成json字符串
Person person = new Person();
person.setName("John");
person.setAge(25);
person.setSex(SexEnum.MALE);

ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(person);

// json字符串轉成Person對象
Person person2 = objectMapper.readValue(jsonStr, Person.class);

上述代碼演示了如何將枚舉類型轉換成對象。在Person對象中,雖然SexEnum是一個枚舉類型,但是在json數據轉換時,Jackson能夠自動地將其轉換成對應的對象。

四、Jackson轉List

Jackson還可以將json數組轉換成List類型對象。以下是一個示例代碼:

public class Person {
    private String name;
    private int age;
}

// json數組
String jsonArr = "[{\"name\":\"John\",\"age\":25},{\"name\":\"Lucy\",\"age\":26}]";

// json數組轉成List類型對象
ObjectMapper objectMapper = new ObjectMapper();
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Person.class);
List<Person> personList = objectMapper.readValue(jsonArr, javaType);

// List類型對象轉成json數組
String jsonString = objectMapper.writeValueAsString(personList);

上述代碼演示了如何將json數組轉換成List類型對象,以及如何將List類型對象轉換成json數組。其中,通過使用objectMapper.getTypeFactory().constructParametricType方法來構造一個List類型的對象,用來指定List中存儲的對象類型。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/289420.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:02
下一篇 2024-12-24 03:02

相關推薦

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

    面向對象編程(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
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25

發表回復

登錄後才能評論