成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ObjectMapper:Java 數據處理利器

開發 前端
ObjectMapper?是?Jackson?庫中用于將?Java?對象轉換為?JSON?格式(序列化),以及將?JSON?格式轉換回?Java?對象(反序列化)的核心類。它提供了一系列方法,支持多種數據格式的讀寫,包括?JSON、XML、YAML?等,不過最常用的還是?JSON?處理。

前言

無論是前后端數據交互,還是數據持久化,都離不開這一過程。ObjectMapper 作為 Jackson 庫的核心類,憑借其強大且靈活的功能,成為了 Java 開發者處理 JSON 數據的得力助手。

基礎概念

ObjectMapper 是 Jackson 庫中用于將 Java 對象轉換為 JSON 格式(序列化),以及將 JSON 格式轉換回 Java 對象(反序列化)的核心類。它提供了一系列方法,支持多種數據格式的讀寫,包括 JSON、XML、YAML 等,不過最常用的還是 JSON 處理。通過 ObjectMapper,開發者可以輕松實現對象與 JSON 字符串之間的雙向轉換,極大地簡化了數據處理流程。

基本使用

序列化:Java 對象轉 JSON

public class SerializationExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            User user = new User();
            user.setName("Alice");
            user.setAge(25);
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

反序列化:JSON 轉 Java 對象

public class DeserializationExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            String json = "{\"name\":\"Bob\",\"age\":30}";
            User user = objectMapper.readValue(json, User.class);
            System.out.println("Name: " + user.getName() + ", Age: " + user.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

高級特性

通常默認的序列化和反序列化方式不能滿足需求,這時可以自定義序列化和反序列化邏輯。Jackson 提供了JsonSerializer和JsonDeserializer接口來實現這一功能。

自定義序列化和反序列化

public class CustomAgeSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString("Age: " + value);
    }
}

反序列化的自定義方式類似,通過實現JsonDeserializer接口并使用@JsonDeserialize注解來指定。

忽略屬性

public class User {
    private String name;
    @JsonIgnore
    private int age;

    // 省略getter和setter方法
}

此外,還可以通過ObjectMapper的setSerializationInclusion方法來設置全局的屬性包含策略,例如只序列化非空屬性:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

性能優化

由于創建ObjectMapper實例的開銷較大,特別是在頻繁進行序列化和反序列化操作的場景下,應該盡量重用ObjectMapper實例??梢詫bjectMapper實例定義為單例模式,或者在應用啟動時創建一個全局的ObjectMapper實例供各處使用。

public class JsonUtils {

    private static final ObjectMapper OBJECT_MAPPER;

    static {
        OBJECT_MAPPER = new ObjectMapper();
        // 配置:遇到未知屬性不拋出異常
        OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // 配置:日期時間格式使用ISO標準格式
        OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        // 注冊Java 8日期時間模塊
        OBJECT_MAPPER.registerModule(new JavaTimeModule());
    }

    /**
     * 將Java對象轉換為JSON字符串
     *
     * @param object 待轉換的Java對象
     * @return JSON字符串
     */
    public static String toJsonString(Object object) {
        try {
            return OBJECT_MAPPER.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("序列化對象為JSON字符串失敗", e);
        }
    }

    /**
     * 將JSON字符串轉換為指定類型的Java對象
     *
     * @param json  JSON字符串
     * @param clazz 目標Java類
     * @param <T>   目標Java類的類型參數
     * @return 轉換后的Java對象
     */
    public static <T> T fromJsonString(String json, Class<T> clazz) {
        try {
            return OBJECT_MAPPER.readValue(json, clazz);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("反序列化JSON字符串為Java對象失敗", e);
        }
    }
}
責任編輯:武曉燕 來源: 一安未來
相關推薦

2024-06-19 21:12:02

2013-12-27 16:15:11

Hadoop大數據處理

2013-12-30 10:40:12

大數據處理大數據Hadoop

2023-12-05 08:47:30

Pandas數據處理

2023-11-29 13:56:00

數據技巧

2024-01-31 23:22:35

vaexPython

2018-12-07 14:50:35

大數據數據采集數據庫

2020-11-02 15:56:04

大數據數據庫技術

2023-08-02 08:47:55

聚合框架MongoDB

2017-07-21 14:22:17

大數據大數據平臺數據處理

2021-07-20 15:37:37

數據開發大數據Spark

2013-12-16 17:17:01

OpenMp數據處理

2023-07-31 08:21:22

語法校對器Pick

2015-12-10 21:31:19

七牛數據處理架構變遷

2025-04-22 04:00:00

2021-12-29 10:51:19

JavaSPL架構

2010-03-16 18:24:44

Java線程模型

2016-12-13 11:48:05

數據處理不平衡數據

2012-06-26 10:03:06

海量數據處理

2025-01-07 13:58:08

SQL數據處理函數數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天插天天搞 | 免费的日批视频 | 干狠狠| 国产精品视频一 | 成人av免费网站 | 二区视频 | 亚洲国产黄 | 日韩三级在线 | 美女福利视频 | 四虎影院免费在线 | 欧美成人精品在线 | 午夜影院普通用户体验区 | 欧美视频成人 | 亚洲精品九九 | 国产在线精品一区二区 | 国产成人精品一区二 | 亚洲三区视频 | 国产亚洲精品91 | 成人av一区二区三区 | 九色在线观看 | 久草新在线 | 精品国产一区二区三区免费 | 久久亚洲视频 | 在线视频一区二区三区 | 在线免费小视频 | 午夜99| 日日摸日日添日日躁av | 一区二区av | 日本精品一区二区三区视频 | 国产一级视频 | 成人午夜高清 | 91高清视频在线 | 久久99久久 | 女同久久另类99精品国产 | 我爱操 | 精品久久久久久久久久久久久久久久久 | 黄色大片免费网站 | 超碰最新在线 | 成人在线一区二区 | 国产视频第一页 | 国产剧情一区二区三区 |