欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Jackson封裝常用的JsonUtil工具類方式

 更新時(shí)間:2025年06月29日 13:24:29   作者:yuhuofei2021  
這篇文章主要介紹了使用Jackson封裝常用的JsonUtil工具類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在實(shí)際開發(fā)中,我們對(duì)于 JSON 數(shù)據(jù)的處理,通常有這么幾個(gè)第三方工具包可以使用:

  • gson:谷歌的
  • fastjson:阿里巴巴的
  • jackson:美國(guó)FasterXML公司的,Spring框架默認(rèn)用的

由于以前一直用習(xí)慣了阿里的 fastjson,最近突然改為 jackson ,不是太習(xí)慣,所以手寫一個(gè)工具類,應(yīng)付一下工作中常用的一些方法。

1. 引入依賴包

在 pom.xml 文件中加入以下依賴

<!-- 引入jackson依賴包-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.14.2</version>
</dependency>

2. 編寫 JsonUtil 工具類

package com.yuhuofei.utils;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

/**
 * @Description 由于習(xí)慣了用fastjson處理JSON數(shù)據(jù),突然改成用jackson,有些不適應(yīng),所以打算用jackson封裝出類似fastjson里的方法進(jìn)行使用
 * @ClassName JsonUtil
 * @Author yuhuofei
 * @Date 2023/8/19 14:36
 * @Version 1.0
 */
@Slf4j
public class JsonUtil {

    private static ObjectMapper objectMapper = new ObjectMapper();

    // 時(shí)間日期格式
    private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";

    //以靜態(tài)代碼塊初始化
    static {
        //對(duì)象的所有字段全部列入序列化
        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
        //取消默認(rèn)轉(zhuǎn)換timestamps形式
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        //忽略空Bean轉(zhuǎn)json的錯(cuò)誤
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        //所有的日期格式都統(tǒng)一為以下的格式,即yyyy-MM-dd HH:mm:ss
        objectMapper.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));
        //忽略 在json字符串中存在,但在java對(duì)象中不存在對(duì)應(yīng)屬性的情況。防止錯(cuò)誤
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }


    /**===========================以下是從JSON中獲取對(duì)象====================================*/
    public static <T> T parseObject(String jsonString, Class<T> object) {
        T t = null;
        try {
            t = objectMapper.readValue(jsonString, object);
        } catch (JsonProcessingException e) {
            log.error("JsonString轉(zhuǎn)為自定義對(duì)象失?。簕}", e.getMessage());
        }
        return t;
    }

    public static <T> T parseObject(File file, Class<T> object) {
        T t = null;
        try {
            t = objectMapper.readValue(file, object);
        } catch (IOException e) {
            log.error("從文件中讀取json字符串轉(zhuǎn)為自定義對(duì)象失?。簕}", e.getMessage());
        }
        return t;
    }

    //將json數(shù)組字符串轉(zhuǎn)為指定對(duì)象List列表或者M(jìn)ap集合
    public static <T> T parseJSONArray(String jsonArray, TypeReference<T> reference) {
        T t = null;
        try {
            t = objectMapper.readValue(jsonArray, reference);
        } catch (JsonProcessingException e) {
            log.error("JSONArray轉(zhuǎn)為L(zhǎng)ist列表或者M(jìn)ap集合失?。簕}", e.getMessage());
        }
        return t;
    }


    /**=================================以下是將對(duì)象轉(zhuǎn)為JSON=====================================*/
    public static String toJSONString(Object object) {
        String jsonString = null;
        try {
            jsonString = objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            log.error("Object轉(zhuǎn)JSONString失敗:{}", e.getMessage());
        }
        return jsonString;
    }

    public static byte[] toByteArray(Object object) {
        byte[] bytes = null;
        try {
            bytes = objectMapper.writeValueAsBytes(object);
        } catch (JsonProcessingException e) {
            log.error("Object轉(zhuǎn)ByteArray失?。簕}", e.getMessage());
        }
        return bytes;
    }

    public static void objectToFile(File file, Object object) {
        try {
            objectMapper.writeValue(file, object);
        } catch (JsonProcessingException e) {
            log.error("Object寫入文件失敗:{}", e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**=============================以下是與JsonNode相關(guān)的=======================================*/
    //JsonNode和JSONObject一樣,都是JSON樹形模型,只不過(guò)在jackson中,存在的是JsonNode
    public static JsonNode parseJSONObject(String jsonString) {
        JsonNode jsonNode = null;
        try {
            jsonNode = objectMapper.readTree(jsonString);
        } catch (JsonProcessingException e) {
            log.error("JSONString轉(zhuǎn)為JsonNode失?。簕}", e.getMessage());
        }
        return jsonNode;
    }

    public static JsonNode parseJSONObject(Object object) {
        JsonNode jsonNode = objectMapper.valueToTree(object);
        return jsonNode;
    }

    public static String toJSONString(JsonNode jsonNode) {
        String jsonString = null;
        try {
            jsonString = objectMapper.writeValueAsString(jsonNode);
        } catch (JsonProcessingException e) {
            log.error("JsonNode轉(zhuǎn)JSONString失?。簕}", e.getMessage());
        }
        return jsonString;
    }

    //JsonNode是一個(gè)抽象類,不能實(shí)例化,創(chuàng)建JSON樹形模型,得用JsonNode的子類ObjectNode,用法和JSONObject大同小異
    public static ObjectNode newJSONObject() {
        return objectMapper.createObjectNode();
    }

    //創(chuàng)建JSON數(shù)組對(duì)象,就像JSONArray一樣用
    public static ArrayNode newJSONArray() {
        return objectMapper.createArrayNode();
    }


    /**===========以下是從JsonNode對(duì)象中獲取key值的方法,個(gè)人覺(jué)得有點(diǎn)多余,直接用JsonNode自帶的取值方法會(huì)好點(diǎn),出于糾結(jié)癥,還是補(bǔ)充進(jìn)來(lái)了*/
    public static String getString(JsonNode jsonObject, String key) {
        String s = jsonObject.get(key).asText();
        return s;
    }

    public static Integer getInteger(JsonNode jsonObject, String key) {
        Integer i = jsonObject.get(key).asInt();
        return i;
    }

    public static Boolean getBoolean(JsonNode jsonObject, String key) {
        Boolean bool = jsonObject.get(key).asBoolean();
        return bool;
    }

    public static JsonNode getJSONObject(JsonNode jsonObject, String key) {
        JsonNode json = jsonObject.get(key);
        return json;
    }
}

3. 測(cè)試

  • 新建一個(gè) User 類
package com.yuhuofei.entity;

import lombok.Data;

import java.io.Serializable;

/**
 * @Description
 * @ClassName User
 * @Author yuhuofei
 * @Date 2023/8/19 14:49
 * @Version 1.0
 */
@Data
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer id;

    private String name;

    private String passWord;
}

  • 新建一個(gè)測(cè)試類
import com.yuhuofei.entity.User;
import com.yuhuofei.utils.JsonUtil;

/**
 * @Description
 * @ClassName TestJsonUtil
 * @Author yuhuofei
 * @Date 2023/8/19 14:58
 * @Version 1.0
 */
public class TestJsonUtil {

    public static void main(String[] args) {

        String jsonString = "{\"id\":11,\"name\":\"小明\",\"passWord\":\"123456\"}";
        User user = JsonUtil.parseObject(jsonString, User.class);
        System.out.println(user);
    }
}

執(zhí)行 main 方法測(cè)試,可以看到在控制臺(tái)正確地輸出了結(jié)果。

在這里插入圖片描述

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用@Value為靜態(tài)變量導(dǎo)入并使用導(dǎo)入的靜態(tài)變量進(jìn)行初始化方式

    使用@Value為靜態(tài)變量導(dǎo)入并使用導(dǎo)入的靜態(tài)變量進(jìn)行初始化方式

    這篇文章主要介紹了使用@Value為靜態(tài)變量導(dǎo)入并使用導(dǎo)入的靜態(tài)變量進(jìn)行初始化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Java線程池和Executor原理的分析

    詳解Java線程池和Executor原理的分析

    這篇文章主要介紹了詳解Java線程池和Executor原理的分析的相關(guān)資料,這里提供實(shí)例及分析原理幫助大家理解這部分知識(shí),需要的朋友可以參考下
    2017-07-07
  • Java BIO,NIO,AIO總結(jié)

    Java BIO,NIO,AIO總結(jié)

    這篇文章主要介紹了Java BIO,NIO,AIO的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • 詳解Java子線程異常時(shí)主線程事務(wù)如何回滾

    詳解Java子線程異常時(shí)主線程事務(wù)如何回滾

    如果主線程向線程池提交了一個(gè)任務(wù),如果執(zhí)行這個(gè)任務(wù)過(guò)程中發(fā)生了異常,如何讓主線程捕獲到該異常并且進(jìn)行事務(wù)的回滾?本篇文章帶給你答案
    2022-03-03
  • 在項(xiàng)目中直接使用hystrix的流程分析

    在項(xiàng)目中直接使用hystrix的流程分析

    最近由于一些背景原因,需要在項(xiàng)目中需要對(duì)接口進(jìn)行限流。所以就考慮到了直接使用Hystrix,但是呢,又不想直接使用SpringCloud,而是直接引入原生,現(xiàn)在發(fā)現(xiàn)挺好用的,所以記錄下來(lái),需要的朋友參考下吧
    2022-06-06
  • Mybatis查詢Sql結(jié)果未映射到對(duì)應(yīng)得實(shí)體類上的問(wèn)題解決

    Mybatis查詢Sql結(jié)果未映射到對(duì)應(yīng)得實(shí)體類上的問(wèn)題解決

    使用mybatis查詢表數(shù)據(jù)得時(shí)候,發(fā)現(xiàn)對(duì)應(yīng)得實(shí)體類字段好多都是null,本文主要介紹了Mybatis查詢Sql結(jié)果未映射到對(duì)應(yīng)得實(shí)體類上的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 淺談Hibernate對(duì)象狀態(tài)之間的神奇轉(zhuǎn)換

    淺談Hibernate對(duì)象狀態(tài)之間的神奇轉(zhuǎn)換

    這篇文章主要介紹了淺談Hibernate對(duì)象狀態(tài)之間的神奇轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • IDEA配置MAVEN本地倉(cāng)庫(kù)的實(shí)現(xiàn)步驟

    IDEA配置MAVEN本地倉(cāng)庫(kù)的實(shí)現(xiàn)步驟

    本文主要介紹了IDEA配置MAVEN本地倉(cāng)庫(kù)的實(shí)現(xiàn)步驟,將詳細(xì)介紹如何配置Maven環(huán)境變量,Maven配置文件,可以輕松地設(shè)置和配置MAVEN本地倉(cāng)庫(kù),以便在IDEA中享受更高效的開發(fā)體驗(yàn)
    2023-08-08
  • Java8中時(shí)區(qū)與不同歷法處理指南

    Java8中時(shí)區(qū)與不同歷法處理指南

    Java?8?的?java.time?API?不僅修復(fù)了舊版日期時(shí)間?API?的設(shè)計(jì)缺陷,還提供了對(duì)時(shí)區(qū)和多歷法的全面支持,下面小編就來(lái)講講具體的處理操作,有需要的可以了解下
    2025-04-04
  • SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)并訪問(wèn)功能

    SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)并訪問(wèn)功能

    zookeeper和eureka一樣,是用于充當(dāng)服務(wù)注冊(cè)功能服務(wù)器的一個(gè)springcloud插件,這篇文章主要介紹了SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)并訪問(wèn),需要的朋友可以參考下
    2022-06-06

最新評(píng)論