Fastjson2常用操作大全:對象、字符串、集合、數組、Map與JSON互轉實戰

高性能: 核心解析器和生成器經過深度優化,性能遠超許多同類庫。

功能豐富: 支持標準JSON、JSONPath查詢、泛型處理、日期格式化、自定義序列化/反序列化等。

易用性: API 設計簡潔直觀,JSON 工具類提供了最常用的 toJSONStringparseObject 方法。

安全性: 相比 1.x 版本,2.x 在反序列化安全性方面做了大量改進,減少了反序列化漏洞的風險(但仍需謹慎配置和使用)。

1. 簡介

Fastjson2 是阿里巴巴開源的高性能 Java JSON 庫,是 Fastjson 1.x 的升級版本。

它提供了將 Java 對象與 JSON 字符串相互轉換的功能,具有 極快的解析和生成速度豐富的功能 以及 良好的安全性(相較于 1.x 版本有顯著改進)。

2. 添加依賴

Maven
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.57</version>
</dependency>
Gradle
implementation 'com.alibaba.fastjson2:fastjson2:2.0.57'

3. 基本用法

前置準備

public class User {private String name;private int age;private String email;public User() {}public User(String name, int age, String email) {this.name = name;this.age = age;this.email = email;}// get和set省略
}

Fastjson2 的核心入口通常是 com.alibaba.fastjson2.JSONcom.alibaba.fastjson2.JSONObjectcom.alibaba.fastjson2.JSONArray 類。

3.1 Java對象轉為JSON字符串

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;public class JavaObjectToJsonExample {public static void main(String[] args) throws Exception {// 示例數據User user = new User("張三", 25, "123@qq.com");String jsonStr = JSON.toJSONString(user);// 輸出: {"name":"張三","age":25,"email":"123@qq.com"}System.out.println(jsonStr);     }
}

3.2 JSON字符串轉為Java對象

import com.alibaba.fastjson2.JSON;public class JavaObjectToJsonExample {public static void main(String[] args) throws Exception {String jsonString = "{\"name\":\"李四\",\"age\":30,\"email\":\"lisi@example.com\"}"; // 反序列化為指定java對象類型User user = JSON.parseObject(jsonString, User.class);
System.out.println(user.getName()); // 輸出: 李四}
}

3.3 JSON字符串轉為JSONObject

在數據結構處于未知的情況,可以將JSON字符串轉為JSONObject。

import com.alibaba.fastjson2.JSON;public class JsonStrToJSONObjectExample {public static void main(String[] args) throws Exception {String jsonString = "{\"name\":\"李四\",\"age\":30,\"email\":\"lisi@example.com\"}"; JSONObject jsonObject = JSON.parseObject(jsonString);String name = jsonObject.getString("name");Integer age = jsonObject.getInteger("age");}
}

3.4 JSONObject轉為JSON字符串

import com.alibaba.fastjson2.JSON;public class JsonStrToJSONObjectExample {public static void main(String[] args) throws Exception {String jsonString = "{\"name\":\"李四\",\"age\":18,\"email\":\"123@qq.com\"}"; JSONObject jsonObject = new JSONObject;jsonObject.put("name", "李四");jsonObject.put("age", 18);jsonObject.put("email", "123@qq.com");// 輸出: {"name":"李四","age":18,"email":"123@qq.com"}System.out.println(jsonObject.toJSONString())}
}

3.5 List集合轉為JSON字符串

import com.alibaba.fastjson2.JSON;public class JsonStrToJSONObjectExample {public static void main(String[] args) throws Exception {List<User> array = new ArrayList<>;array.add(new User("張三", 18, "123@qq.com"));array.add(new User("李四", 19, "456@qq.com"));String str = JSONArray.toJSONString(array);// 輸出: [{"name":"張三","age":18,"email":"123@qq.com"},{"name":"李四","age":19,"email":"456@qq.com"}]System.out.println(str)}
}

3.6 JSON字符串轉為List集合

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;public class JsonStrToJSONObjectExample {public static void main(String[] args) throws Exception {String str = "[{\"name\":\"張三\",\"age\":18,\"email\":\"123@qq.com\"},{\"name\":\"李四\",\"age\":19,\"email\":\"456@qq.com\"}]";// 輸出: [{"name":"張三","age":18,"email":"123@qq.com"},{"name":"李四","age":19,"email":"456@qq.com"}]// 方式一List<User> array1 = JSONArray.parseArray(str, User.class);// 方式二List<User> array2 = JSON.parseObject(str, new TypeReference<List<User>>(){});}
}

3.7 數組轉為JSON字符串

import com.alibaba.fastjson2.JSON;public class JsonToArrayExample {public static void main(String[] args) throws Exception {// JSON 字符串轉為 String[] 數組String jsonStr1 = "[\"蘋果\", \"香蕉\", \"橙子\"]";String[] strArray = JSON.parseObject(jsonStr1, String[].class);// JSON 字符串轉為復雜對象數組String jsonStr2 = "[{\"name\":\"張三\",\"age\":18,\"email\":\"123@qq.com\"},{\"name\":\"李四\",\"age\":19,\"email\":\"456@qq.com\"}]";User[] userArray = JSON.parseObject(jsonStr2, User[].class);}
}

3.8 JSON字符串轉為數組

import com.alibaba.fastjson2.JSON;public class ArrayToJsonExample {public static void main(String[] args) throws Exception {User[] users = {new User("張三", 18, "123@qq.com"),new User("李四", 19, "456@qq.com")};String jsonStr = JSON.toJSONString(users);// 輸出: [{"name":"張三","age":18,"email":"123@qq.com"},{"name":"李四","age":19,"email":"456@qq.com"}]System.out.println(jsonStr);}
}

3.9 Map 轉 JSON 字符串

import com.alibaba.fastjson2.JSON;public class MapToJsonExample {public static void main(String[] args) throws Exception {Map<String, Object> map = new HashMap<>();map.put("name", "張三");map.put("age", 18);map.put("email", "123@qq.com");String jsonStr = JSON.toJSONString(map);// 輸出: {"name":"張三","age":18,"email":"123@qq.com"}System.out.println(jsonStr);}
}

3.10 JSON 字符串轉Map

案例一:

import com.alibaba.fastjson2.JSON;
import java.util.Map;public class JsonToMapExample {public static void main(String[] args) throws Exception {String jsonStr = "{\"name\":\"張三\",\"age\":18,\"email\":\"123@qq.com\"}"Map<String, Object> map = JSON.parseObject(jsonStr, Map.class);}
}

案例二:

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import java.util.Map;public class JsonToMapExample {public static void main(String[] args) throws Exception {// JSON 字符串,值是 User 對象String jsonStr = "{\"user1\":{\"name\":\"張三\",\"age\":18,\"email\":\"123@qq.com\"},\"user2\":{\"name\":\"李四\",\"age\":19,\"email\":\"456@qq.com\"}}";// 解析為 Map<String, User>Map<String, User> userMap = JSON.parseObject(jsonStr,new TypeReference<Map<String, User>>(){});}
}

4. @JSONField注解的使用

import com.alibaba.fastjson2.annotation.JSONField;@Data
public class Product {private String id;// 轉化為JSON后字段名為 product_name@JSONField(name = "product_name")private String name;// 日期格式化@JSONField(format = "yyyy-MM-dd HH:mm:ss")private LocalDateTime releaseDate;// 序列化時忽略此字段@JSONField(serialize = false)private String internalCode;// 反序列化時忽略此字段@JSONField(deserialize = false)private String temporaryStatus;
}

5. 高級特性 JSONPath

Fastjson2 內置了強大的 JSONPath 支持,用于查詢和修改 JSON 數據。

import com.alibaba.fastjson2.JSONPath;String jsonStr = "{\"store\":{\"book\":[{\"title\":\"Book1\",\"price\":10},{\"title\":\"Book2\",\"price\":15}],\"bicycle\":{\"price\":50}}}";// 查詢所有書的標題
List<String> titles = JSONPath.of("$.store.book[*].title").extract(jsonStr);
// 輸出結果為:[Book1, Book2]
System.out.println(titles);// 查詢價格大于12的書
List<Object> expensiveBooks = JSONPath.of("$.store.book[?(@.price > 12)]").extract(jsonStr);
// 輸出結果為:[{"title":"Book2","price":15}]
System.out.println(expensiveBooks);// 修改價格,將第一本書價格改為12
JSONPath.set(jsonStr, "$.store.book[0].price", 12);

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

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

相關文章

大模型——字節Coze重磅開源!Dify何去何從

大模型——字節Coze重磅開源!Dify何去何從 想必很多人盼了很久,就在昨晚,字節Coze終于開源了!Coze Studio 是字節跳動新一代 AI Agent 開發平臺扣子(Coze)的開源版本。 提供 AI Agent 開發所需的全部核心技術:Prompt、RAG、Plugin、Workflow,使得開發者可以聚焦創造 A…

NaVid——基于單目RGB捕獲的視頻讓VLM規劃「連續環境中VLN」的下一步:無需地圖/里程計/深度信息(含MP3D/R2R/RxR,及VLN-CE的詳解)

前言 因為我司「七月在線」準備于25年7月底復現下NaVILA&#xff0c;而在研究NaVILA的過程中&#xff0c;注意到了這個NaVid 雖然NaVid目前已經不是VLN sota了&#xff0c;但其首次展示了VLM在無需地圖、里程計或深度輸入的情況下&#xff0c;能夠實現優秀的導航性能且對后來…

【Vue2】結合chrome與element-ui的網頁端條碼打印

所有文章都是免費查看的&#xff0c;如果有無法查看的情況&#xff0c;煩請聯系我修改哈~ 序言 為什么要做這個呢&#xff1f;因為所需要的條碼打印功能比較簡單&#xff0c;符合需要即可&#xff0c;但是呢網上查看了發現并沒有合適的開源項&#xff0c;其他成熟的軟件收費又超…

循環神經網絡——動手學深度學習7

環境&#xff1a;PyCharm python3.8 &#x1f449;【循環神經網絡】(recurrent neural network&#xff0c;RNN) RNN通過 引入狀態變量存儲過去的信息和當前的輸入&#xff0c;從而可以確定當前的輸出。狀態變量捕捉序列的時序依賴&#xff0c;是處理文本、時間序列等數據的…

Java面試寶典:MySQL8新特性底層原理

一、降序索引的革新 1.1 降序索引的核心概念 MySQL 8.0 實現了真正的降序索引(Descending Index) 支持,這是數據庫引擎層面的重大改進: 存儲引擎支持:僅 InnoDB 存儲引擎支持降序索引,且僅適用于 B+Tree 索引結構 語法顯式聲明:通過 DESC 關鍵字顯式指定字段的排序方向…

前端-html+CSS基礎到高級(三)html基礎和開發工具

一、html語法規范什么是注釋?在同學上課學習時&#xff0c;我們會在書本段落間記錄內容的注解&#xff0c;方便下次看到此處理解。問題&#xff1a;我們在書本段落間記錄下的注解是為了給誰看的&#xff1f; 下次的閱讀課本者&#xff08;自己&#xff09;。程序員在寫代碼時也…

-Dspring.output.ansi.enabled=ALWAYS 設置彩色日志不生效

-Dspring.output.ansi.enabledALWAYS 設置彩色日志不生效 問題原因&#xff1a;使用的自定義的 logback-spring.xml日志需要改一下 <?xml version"1.0" encoding"UTF-8"?> <configuration><appender name"STDOUT" class"c…

C# 判斷語句深度解析

C# 判斷語句深度解析 引言 在編程領域,C# 是一種廣泛使用的面向對象的編程語言,常用于構建各種應用程序,從桌面到移動應用,再到網站服務。C# 的核心特性之一是其強大的控制流機制,其中包括條件判斷。本文將深入探討 C# 中的判斷語句,包括它們的類型、使用場景以及最佳實…

Ambari 3.0.0 全網首發支持 Ubuntu 22!

本月我們團隊帶來了一個重磅進展&#xff1a;Ambari 3.0.0 全網首發支持 Ubuntu 22&#xff01; 經過數月籌備和持續迭代&#xff0c;終于讓 Ambari 以及大數據基礎組件可以順利運行在 Ubuntu 22 上。 需求來源&#xff1a;用戶呼聲決定研發方向 年初有位小伙伴私信我們&#x…

Android Camera capture

序 想了下還是擠擠時間&#xff0c;把相機這基礎流程寫完吧&#xff0c;前面每篇寫的都還是挺耗時的&#xff08;就是累了&#xff0c;想偷偷懶&#xff0c;哈哈哈哈&#xff09;&#xff0c;那接著前面的幾篇文章&#xff0c;給這一些列寫上一個中規中矩的結局吧~ APP層 以下是…

落霞歸雁思維框架應用(十) ——在職考研 199 管綜 + 英語二 30 周「順水行舟」上岸指南

落霞歸雁思維框架應用&#xff08;十&#xff09; ——在職考研 199 管綜 英語二 30 周「順水行舟」上岸指南 CSDN 首發 | 作者&#xff1a;落霞歸雁 | 2025-08-01 開場&#xff1a;把 199英二 從“兩座大山”變成“兩條順流” 在職黨最怕兩句話&#xff1a; “管綜題量太大…

自動調優 vLLM 服務器參數(實戰指南)

1. 操作步驟 該腳本能夠自動搜索最優的vLLM服務器參數組合&#xff08;包括max-num-seqs和max-num-batched-tokens&#xff09;&#xff0c;在滿足端到端延遲和前綴緩存命中率等要求的同時&#xff0c;實現吞吐量最大化。 1.1 前提條件 克隆 vLLM 并切到目標分支git clone http…

【騰訊云】EdgeOne免費版實現網站加速與安全防護

作為一名個人站長&#xff0c;我深知在有限的預算下如何為網站提供穩定、快速的服務是關鍵。騰訊云推出了 EdgeOne免費版 https://edgeone.ai/zh/redemption已經有一段時間。結合我的實際體驗&#xff0c;我想從國內備案域名的角度&#xff0c;分享一下如何利用這個工具提升網站…

修改gitlab默認的語言

文章目錄網上的方法1. 采用數據庫觸發器的方法2. 登錄pg庫2.1 查看表2.2 創建function2.3 創建觸發器2.4 修改歷史數據網上的方法 網上修改/opt/gitlab/embedded/service/gitlab-rails/config/application.rb的方法&#xff0c;我試了&#xff0c;沒生效&#xff0c;沒進一步研…

ndk { setAbiFilters([‘armeabi-v7a‘, “arm64-v8a“]) }

deepseek回答&#xff1a; 好的&#xff0c;我現在需要解釋build.gradle中這段ndk配置代碼的含義。首先&#xff0c;用戶提供的代碼片段是&#xff1a; ndk { setAbiFilters([‘armeabi-v7a’, “arm64-v8a”]) } 我的第一步是理解每個部分的作用。ndk塊在Android構建文件中用于…

k8s 1.30 通過helm部署ingress-controller-4.12.1

一、基本概念k8s集群中&#xff0c;ingress作為集群內服務對外暴漏的訪問接入點&#xff0c;幾乎承載著集群內服務訪問的所有流量。ingress是k8s中的一個資源對象&#xff0c;用來管理集群外部訪問集群內部服務的方式。可以通過ingress資源來配置不同的轉發規則&#xff0c;從而…

Gitee:本土開發者生態的崛起與數字化轉型新引擎

Gitee&#xff1a;本土開發者生態的崛起與數字化轉型新引擎 在數字化轉型浪潮席卷全球的當下&#xff0c;代碼托管平臺已從單純的代碼存儲工具演變為企業技術創新的基礎設施。作為中國領先的一站式DevOps平臺&#xff0c;Gitee以其本地化優勢和創新功能矩陣&#xff0c;正重新定…

Servlet HTTP 狀態碼詳解

Servlet HTTP 狀態碼詳解 引言 在Web開發中,HTTP狀態碼是服務器響應客戶端請求時返回的狀態信息。這些狀態碼有助于開發者了解請求處理的結果,并針對不同的狀態碼進行相應的處理。Servlet作為Java Web開發的重要技術之一,理解HTTP狀態碼對于開發高質量的Web應用至關重要。…

ubuntu qt環境下出現No suitable kits found解決方案

1. 清理 Qt Creator 緩存Qt Creator 會緩存項目配置、索引等數據&#xff0c;可能導致某些異常。清理方法&#xff1a;(1) 刪除 Qt Creator 配置目錄bashrm -rf ~/.config/QtProject/&#xff08;Ubuntu/Linux&#xff09; 或 Windows&#xff1a;cmdrmdir /s /q "%APPDAT…

【保姆級喂飯教程】Python依賴管理工具大全:Virtualenv、venv、Pipenv、Poetry、pdm、Rye、UV、Conda、Pixi等

目錄前言1前言2一、包管理工具1. pip&#xff08;Python官方&#xff0c;2008&#xff09;二、虛擬環境工具1. virtualenv&#xff08;Ian Bicking&#xff0c;2007&#xff09;2. venv&#xff08;Python3.3&#xff0c;2012&#xff09;三、版本管理工具1. pyenv&#xff08;…