【Java 進階篇】從Java對象到JSON:Jackson的魔法之旅

在這里插入圖片描述

在現代的軟件開發中,處理數據的能力是至關重要的。而當我們談及數據格式時,JSON(JavaScript Object Notation)通常是首選。為了在Java中輕松地將對象轉換為JSON,我們需要一種強大而靈活的工具。這時,Jackson就閃亮登場了。

前言

眾所周知,Java是一種強類型語言,而JSON是一種弱類型的數據交換格式。這種類型之間的不匹配可能使得在它們之間進行轉換變得復雜。Jackson庫通過提供豐富的注解和靈活的配置選項,使得Java對象到JSON的轉換變得簡單而高效。

初識Jackson

在開始深入之前,讓我們先了解一下Jackson是什么。Jackson是一個強大的Java庫,用于處理JSON格式的數據。它提供了一組注解和一些核心類,使得在Java對象與JSON之間進行相互轉換變得十分容易。

依賴配置

首先,我們需要在項目中添加Jackson的依賴。如果使用Maven,可以在pom.xml文件中添加以下依賴:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.0</version>
</dependency>

簡單的對象轉JSON

讓我們從一個簡單的Java對象開始,將其轉換為JSON。考慮以下Person類:

import com.fasterxml.jackson.databind.ObjectMapper;public class Person {private String name;private int age;// 省略構造函數、getter和setter
}

現在,我們將一個Person對象轉換為JSON字符串:

public class JsonExample {public static void main(String[] args) throws Exception {// 創建一個Person對象Person person = new Person("John Doe", 25);// 創建一個ObjectMapper對象ObjectMapper objectMapper = new ObjectMapper();// 將Person對象轉換為JSON字符串String jsonString = objectMapper.writeValueAsString(person);// 輸出結果System.out.println(jsonString);}
}

在這個例子中,ObjectMapper類的writeValueAsString方法將Person對象轉換為JSON字符串。輸出結果可能類似于:

{"name":"John Doe","age":25}

對象列表與Map的轉換

對象列表轉JSON

有時我們需要處理包含多個對象的列表。Jackson可以輕松地將對象列表轉換為JSON數組。考慮以下PersonList類:

import java.util.List;public class PersonList {private List<Person> persons;// 省略構造函數、getter和setter
}

現在,我們將一個PersonList對象轉換為JSON字符串:

public class JsonListExample {public static void main(String[] args) throws Exception {// 創建一個包含多個Person對象的列表List<Person> personList = List.of(new Person("Alice", 30),new Person("Bob", 28),new Person("Charlie", 35));// 創建一個PersonList對象PersonList personListObject = new PersonList(personList);// 創建一個ObjectMapper對象ObjectMapper objectMapper = new ObjectMapper();// 將PersonList對象轉換為JSON字符串String jsonString = objectMapper.writeValueAsString(personListObject);// 輸出結果System.out.println(jsonString);}
}

在這個例子中,PersonList對象包含一個List<Person>字段,通過ObjectMapperwriteValueAsString方法,我們得到的JSON字符串可能類似于:

{"persons":[{"name":"Alice","age":30},{"name":"Bob","age":28},{"name":"Charlie","age":35}]}

Map轉JSON

除了列表,有時我們還需要將Java中的Map對象轉換為JSON。讓我們看一個PersonMap類的例子:

import java.util.Map;public class PersonMap {private Map<String, Person> personMap;// 省略構造函數、getter和setter
}

現在,我們將一個PersonMap對象轉換為JSON字符串:

public class JsonMapExample {public static void main(String[] args) throws Exception {// 創建一個包含多個Person對象的MapMap<String, Person> personMap = Map.of("first", new Person("Alice", 30),"second", new Person("Bob", 28),"third", new Person("Charlie", 35));// 創建一個PersonMap對象PersonMap personMapObject = new PersonMap(personMap);// 創建一個ObjectMapper對象ObjectMapper objectMapper = new ObjectMapper();// 將PersonMap對象轉換為JSON字符串String jsonString = objectMapper.writeValueAsString(personMapObject);// 輸出結果System.out.println(jsonString);}
}

在這個例子中,PersonMap對象包含一個Map<String, Person>字段,通過ObjectMapperwriteValueAsString方法,我們得到的JSON字符串可能類似于:

{"personMap":{"first":{"name":"Alice","age":30},"second":{"name":"Bob","age":28},"third":{"name":"Charlie","age":35}}}

小結

在這篇博客中,我們初步了解了如何使用Jackson庫將Java對象轉換為JSON字符串。通過一些簡單的例子,我們學會了處理包含對象列表和Map的情況。Jackson提供了強大而靈活的工具,使得在Java和JSON之間進行轉換變得非常容易。希望這篇博客能幫助你更好地理解Jackson的基礎用法,讓你在處理數據時更加得心應手。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Java 進階篇】Redis:打開緩存之門

介紹 Redis&#xff08;Remote Dictionary Server&#xff09;是一個高性能的鍵值對存儲系統&#xff0c;被廣泛用作緩存、消息中間件和數據庫。它以其快速的讀寫能力、支持多種數據結構和豐富的功能而聞名。在這篇博客中&#xff0c;我們將深入了解Redis的概念、安裝以及基本…

MQTT協議消息代理服務遠程連接

目錄 1. Linux 搭建 Mosquitto 2. Linux 安裝Cpolar 3. 創建MQTT服務公網連接地址 4. 客戶端遠程連接MQTT服務 5. 代碼調用MQTT服務 6. 固定連接TCP公網地址 7. 固定地址連接測試 Mosquitto是一個開源的消息代理&#xff0c;它實現了MQTT協議版本3.1和3.1.1。它可以在不…

第二十章:多線程

進程 線程的特點 1.進程是資源分配的最小單位&#xff0c;線程是最小的執行單位 2.一個進程可以有多個線程 3.線程共享進程資源 package twentyth; public class ThreadTest extends Thread { public void run() { for (int i 1; i < 10; i) {//繼承重…

Unity開發之C#基礎-File文件讀取

前言 今天我們將要講解到c#中 對于文件的讀寫是怎樣的 那么沒接觸過特別系統編程小伙伴們應該會有一個疑問 這跟文件有什么關系呢&#xff1f; 我們這樣來理解 首先 大家對電腦或多或少都應該有不少的了解吧 那么我們這些軟件 都是通過變成一個一個文件保存在電腦中 我們才可以…

【2023C卷最新題目】20天拿下華為OD筆試之【貪心】2023C-找座位/2023B-座位調整-全網注釋最詳細分類最全的華為OD真題題解

文章目錄 題目描述與示例題目描述輸入輸出說明示例一輸入輸出 示例二輸入輸出說明 解題思路代碼PythonJavaC時空復雜度 相同問題不同描述2023C-找座位題目描述輸入描述輸出描述示例一輸入輸出 示例二輸入輸出 華為OD算法/大廠面試高頻題算法練習沖刺訓練 題目描述與示例 題目描…

Spring Boot創建和使用(重要)

Spring的誕生是為了簡化Java程序開發的&#xff01; Spring Boot的誕生是為了簡化Spring程序開發的&#xff01; Spring Boot就是Spring框架的腳手架&#xff0c;為了快速開發Spring框架而誕生的&#xff01;&#xff01; Spring Boot的優點&#xff1a; 快速集成框架&#x…

2023年G2電站鍋爐司爐證考試題庫及G2電站鍋爐司爐試題解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2023年G2電站鍋爐司爐證考試題庫及G2電站鍋爐司爐試題解析是安全生產模擬考試一點通結合&#xff08;安監局&#xff09;特種作業人員操作證考試大綱和&#xff08;質檢局&#xff09;特種設備作業人員上崗證考試大綱…

MySQL 事務的底層原理和 MVCC(一)

在事務的實現機制上&#xff0c;MySQL 采用的是 WAL&#xff08;Write-ahead logging&#xff0c;預寫式日志&#xff09;機制來實現的。 在使用 WAL 的系統中&#xff0c;所有的修改都先被寫入到日志中&#xff0c;然后再被應用到系統中。通常包含 redo 和 undo 兩部分信息。 …

【Java開發】 Springboot集成Mybatis-Flex

1 Mybatis-Flex 介紹 1.1簡介 Mybatis-Flex 是一個優雅的 Mybatis 增強框架&#xff0c;它非常輕量、同時擁有極高的性能與靈活性。我們可以輕松的使用 Mybaits-Flex 鏈接任何數據庫&#xff0c;其內置的 QueryWrapper 亮點幫助我們極大的減少了 SQL 編寫的工作的同時&#xff…

cocos2dx ??Animate3D(二)

Twirl 扭曲旋轉特效 // 持續時間(時間過后不會回到原來的樣子) // 整個屏幕被分成幾行幾列 // 扭曲中心位置 // 扭曲的數量 // 振幅 static Twirl* create(float duration, const Size& gridSize, const Vec2& position, unsigned int twirls, float amplitude)…

編程語言發展史:C語言的誕生及其影響

預計更新 第一部分&#xff1a;早期編程語言 1.1布爾代數和機器語言 1.2匯編語言的出現和發展 1.3高級語言的興起 第二部分&#xff1a;主流編程語言 1.1 C語言的誕生及其影響 1.2 C語言的發展和應用 1.3 Java語言的出現和發展 1.4 Python語言的興起和特點 1.5 JavaScript語言…

基于springboot實現攝影跟拍預定管理系統【項目源碼+論文說明】計算機畢業設計

基于springboot實現攝影跟拍預定管理系統演示 摘要 首先,論文一開始便是清楚的論述了系統的研究內容。其次,剖析系統需求分析,弄明白“做什么”,分析包括業務分析和業務流程的分析以及用例分析,更進一步明確系統的需求。然后在明白了系統的需求基礎上需要進一步地設計系統,主要…

【2018年數據結構真題】

方法一 給定一個含n(n>1)個整數的數組&#xff0c;請設計一個在時間上盡可能高效的算法&#xff0c;找出數組中未出現的最小正整數。例如&#xff0c;數組{-5&#xff0c;3&#xff0c;2&#xff0c;3}中未出現的最小正整數是1&#xff1b;數組{1&#xff0c;2&#xff0c;…

AIGC變革BI行業,永洪發布vividime全球化品牌

大數據產業創新服務媒體 ——聚焦數據 改變商業 國內BI商業智能市場&#xff0c;一直有著“內永洪&#xff0c;外Tableau”的說法。成立于2012年的永洪科技經過十多年的發展&#xff0c;早已崛起為國內大數據行業的一支勁旅。 ChatGPT火爆出圈之后&#xff0c;AIGC快速滲透&am…

每日一練 | 華為認證真題練習Day19

Day19 華為認證中級考試真題 1、DHCP協議運行過程中&#xff0c;客戶端從申請到IP地址時的流程是 A.1-2-3-4 B.1-4-3-2 C.3-2-1-4 D.3-4-1-2 2、VRRP報文的IP協議號是&#xff1a; A.112 B.114 C.116 D.118 3、MPLS的標簽字段共有多少bit? A.8 B.3 C.1 D.20 4…

【C++】vector的介紹與使用

&#x1f9d1;?&#x1f393;個人主頁&#xff1a;簡 料 &#x1f3c6;所屬專欄&#xff1a;C &#x1f3c6;個人社區&#xff1a;越努力越幸運社區 &#x1f3c6;簡 介&#xff1a;簡料簡料&#xff0c;簡單有料~在校大學生一枚&#xff0c;專注C/C/GO的干貨分…

2020年下半年試題一:論信息系統項目的成本管理

論文題目 1.概要敘述你參與過的信息系統項目&#xff08;項目的背景、項目規模、發起單位、目的、項目內容、組織結構、項目周期、交付的成果等&#xff09;&#xff0c;并說明你在其中承擔的工作&#xff08;項目背景要求本人真實經歷&#xff0c;不得抄襲及杜撰&#xff09;。…

編程語言發展史:匯編語言的出現和發展

一、匯編語言的出現 隨著計算機硬件的發展&#xff0c;機器語言變得越來越復雜&#xff0c;難以被人類程序員理解和編寫。因此&#xff0c;出現了更高級別的編程語言&#xff0c;這些語言使用類似英語的語法&#xff0c;使程序員能夠更容易地編寫和維護程序。 其中一種高級語…

web網頁滲透測試

web網頁滲透測試 流程 信息收集網站掃描訪問控制測試漏洞掃描嘗試注入攻擊驗證漏洞后滲透測試滲透測試報告 信息收集 收集目標網站的基本信息&#xff0c;包括域名、IP 地址、子域名等。使用 WHOIS 查詢、搜索引擎、子域名枚舉工具等進行信息收集。 網站掃描 使用端口掃描…

【Java 進階篇】Redis 數據結構:輕松駕馭多樣性

引言 Redis是一款強大的鍵值對存儲系統&#xff0c;其數據結構的多樣性是其引以為傲的特點之一。在這篇博客中&#xff0c;我們將深入探討Redis的主要數據結構&#xff0c;包括字符串、哈希表、列表、集合和有序集合&#xff0c;并通過實例代碼演示它們的用法。 1. 字符串&am…