如何使用jakarta.json進行json序列化和反序列化
引言
java里,json框架何其多,常見的有jackson、fastjson、gson等。各自的api互不相通,與代碼耦合度高,切換代碼非常高。如果使用json的api為統(tǒng)一的入口,各家再進行實現(xiàn),代碼與實現(xiàn)類不耦合,像slf4j一樣,切換log框架(log4j/logback等)也不用改代碼,代碼只對api依賴,不對實現(xiàn)依賴,那就很好了。
jakarta.json項目就是為了解決這個問題的。自從javax改名jakarta,并全部給eclipse基金會運營,jakarta.json作為Jakarta EE子項目之一也得到了支持。
引入依賴
<dependency> <groupId>jakarta.json.bind</groupId> <artifactId>jakarta.json.bind-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.eclipse</groupId> <artifactId>yasson</artifactId> <version>3.0.3</version> </dependency>
jakarta.json.bind-api是jsonb的接口包,里面只有對象定義、接口定義等,沒有代碼實現(xiàn)。yasson則對jsonb規(guī)范進行了完整實現(xiàn)。
將一個對象序列化為json字符串
@Test void serialize() { User user = new User("John", 12, "This is a test", LocalDate.parse("2020-01-01")); String json = JsonbBuilder.create().toJson(user); System.out.println(json); }
將一個對象序列化為json字符串(格式化)
@Test void prettySerialize() { User user = new User("John", 12, "This is a test", LocalDate.parse("2020-01-01")); String json = JsonbBuilder.create(new JsonbConfig().withFormatting(true)).toJson(user); System.out.println(json); }
將一個json字符串反序列化為一個對象
public record User(String name, int age, String remark, LocalDate birthDate) { } @Test void deserialize() { String json = """ { "name": "John", "age": 12, "remark": "This is a test", "birthDate": "2020-01-01" } """; User user = JsonbBuilder.create().fromJson(json, User.class); System.out.println("user = " + user); }
到此這篇關(guān)于使用jakarta.json進行json序列化和反序列化的文章就介紹到這了,更多相關(guān)json序列化和反序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于SpringBoot打包測試、生產(chǎn)環(huán)境方式
這篇文章主要介紹了關(guān)于SpringBoot打包測試、生產(chǎn)環(huán)境方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09詳解Struts2中json 相互引用死循環(huán)解決辦法
本篇文章主要介紹詳解Struts2中json 相互引用死循環(huán)解決辦法,具有一定的參考價值,有興趣的可以了解一下。2017-01-01Maven中optional和scope元素的使用弄明白了嗎
這篇文章主要介紹了Maven中optional和scope元素的使用弄明白了嗎,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12Java_int、double型數(shù)組常用操作工具類(分享)
下面小編就為大家?guī)硪黄狫ava_int、double型數(shù)組常用操作工具類(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08Java大數(shù)運算BigInteger與進制轉(zhuǎn)換詳解
這篇文章主要介紹了Java大數(shù)運算BigInteger與進制轉(zhuǎn)換詳解,Java 提供了 BigInteger(大整數(shù))類和 BigDecimal(大浮點數(shù))類用于大數(shù)運算,這兩個類都繼承自 Number 類(抽象類),由于 BigInteger 在大數(shù)運算中更常見,需要的朋友可以參考下2023-09-09Java中使用數(shù)組實現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實例
這篇文章主要介紹了Java中使用數(shù)組實現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實例,本文先是講解了實現(xiàn)棧至少應該包括以下幾個方法等知識,然后給出代碼實例,需要的朋友可以參考下2015-01-01JavaWeb實現(xiàn)學生管理系統(tǒng)的超詳細過程
學生信息管理系統(tǒng)是針對學校人事處的大量業(yè)務(wù)處理工作而開發(fā)的管理軟件,主要用于學校學生信息管理,下面這篇文章主要給大家介紹了關(guān)于JavaWeb實現(xiàn)學生管理系統(tǒng)的超詳細過程,需要的朋友可以參考下2023-05-05詳解spring cloud中使用Ribbon實現(xiàn)客戶端的軟負載均衡
這篇文章主要介紹了詳解spring cloud中使用Ribbon實現(xiàn)客戶端的軟負載均衡,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01Java 8 Function函數(shù)式接口及函數(shù)式接口實例
函數(shù)式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。接下來通過本文給大家介紹Java 8 Function函數(shù)式接口及函數(shù)式接口實例代碼,需要的朋友可以參考下2018-05-05