👉 這是一個或許對你有用的社群
《專案實戰(影片)》:從書中學,往事上“練” 《網際網路高頻面試題》:面朝簡歷學習,春暖花開 《架構 x 系統設計》:摧枯拉朽,掌控面試高頻場景題 《精進 Java 學習指南》:系統學習,網際網路主流技術棧 《必讀 Java 原始碼專欄》:知其然,知其所以然

👉這是一個或許對你有用的開源專案國產 Star 破 10w+ 的開源專案,前端包括管理後臺 + 微信小程式,後端支援單體和微服務架構。功能涵蓋 RBAC 許可權、SaaS 多租戶、資料許可權、商城、支付、工作流、大屏報表、微信公眾號、ERP、CRM、AI 大模型等等功能:
Boot 多模組架構:https://gitee.com/zhijiantianya/ruoyi-vue-pro Cloud 微服務架構:https://gitee.com/zhijiantianya/yudao-cloud 影片教程:https://doc.iocoder.cn 【國內首批】支援 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 雙版本
-
1. 使用 Jackson:業界標配 -
2. 使用 Gson:輕量好用 -
3. 使用 FastJSON:高效能 -
4. 使用 JsonPath:快速提取巢狀欄位 -
5. 使用 org.json:輕量工具類 -
6. 手動解析 JSON:靈活度最高 -
總結

1. 使用 Jackson:業界標配
功能特點
-
強大的序列化和反序列化 :支援將 JSON 字串轉為 Java 物件,也支援將 Java 物件轉換為 JSON。 -
支援複雜結構 :處理巢狀物件、陣列、泛型等場景非常輕鬆。 -
支援註解 :如 @JsonIgnore
、@JsonProperty
等,能精細控制序列化與反序列化的行為。 -
效能高 :Jackson 的效能非常出色,是很多企業級專案的首選。
程式碼示例
import
com.fasterxml.jackson.databind.ObjectMapper;
publicclassJacksonExample
{
publicstaticvoidmain(String[] args)throws Exception
{
String json =
"{\"id\":1,\"name\":\"張三\"}"
;
ObjectMapper objectMapper =
new
ObjectMapper();
User user = objectMapper.readValue(json, User
.class)
;
System.out.println(user.getName());
// 輸出:張三
}
}
classUser
{
privateint
id;
private
String name;
// Getters 和 Setters 省略
}
User user =
new
User();
user.setId(
1
);
user.setName(
"李四"
);
ObjectMapper objectMapper =
new
ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json);
// 輸出:{"id":1,"name":"李四"}
高階功能
-
日期格式化 : @JsonFormat(pattern = "yyyy-MM-dd")
-
忽略欄位 : @JsonIgnore
-
重新命名欄位 : @JsonProperty("custom_name")
優缺點
優點 | 缺點 |
---|---|
功能全面,支援複雜場景 | 配置較多,學習成本稍高 |
效能高,社群活躍,企業級專案首選 | 過於強大,部分功能用不上 |
豐富的註解支援,便於控制序列化行為 | 庫體積較大,對於小型專案略顯笨重 |
基於 Spring Boot + MyBatis Plus + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
專案地址:https://github.com/YunaiV/ruoyi-vue-pro 影片教程:https://doc.iocoder.cn/video/
2. 使用 Gson:輕量好用
功能特點
-
輕量級 :Gson 的設計非常簡潔,程式碼量少,適合中小型專案。 -
支援泛型 :可以輕鬆解析帶泛型的 JSON。 -
註解控制 :支援透過註解控制序列化行為,如 @Expose
。 -
易擴充套件 :透過自定義序列化器和反序列化器,可以處理複雜的場景。
程式碼示例
import
com.google.gson.Gson;
publicclassGsonExample
{
publicstaticvoidmain(String[] args)
{
String json =
"{\"id\":1,\"name\":\"王五\"}"
;
Gson gson =
new
Gson();
User user = gson.fromJson(json, User
.class)
;
System.out.println(user.getName());
// 輸出:王五
}
}
User user =
new
User();
user.setId(
2
);
user.setName(
"趙六"
);
Gson gson =
new
Gson();
String json = gson.toJson(user);
System.out.println(json);
// 輸出:{"id":2,"name":"趙六"}
高階功能
-
忽略欄位 :
@Expose
@Exposeprivate String name; -
自定義序列化器/反序列化器 :Gson gson = new GsonBuilder().registerTypeAdapter(CustomClass.class, new CustomSerializer()).create();
優缺點
優點 | 缺點 |
---|---|
輕量級,簡單易用,適合中小型專案 | 效能稍遜於 Jackson |
學習曲線平滑,新手容易上手 | 功能不如 Jackson 豐富 |
提供良好的擴充套件能力 | 複雜物件處理起來較為麻煩 |
基於 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
專案地址:https://github.com/YunaiV/yudao-cloud 影片教程:https://doc.iocoder.cn/video/
3. 使用 FastJSON:高效能
功能特點
-
效能優異 :FastJSON 的解析速度非常快,適合大資料量場景。 -
支援動態欄位 :可以輕鬆處理動態 JSON 資料。 -
強大的型別支援 :支援巢狀物件、泛型、陣列等複雜結構。 -
註解控制 :類似 Jackson 和 Gson,支援註解控制欄位的序列化和反序列化。
程式碼示例
import
com.alibaba.fastjson.JSON;
publicclassFastJsonExample
{
publicstaticvoidmain(String[] args)
{
String json =
"{\"id\":1,\"name\":\"小明\"}"
;
User user = JSON.parseObject(json, User
.class)
;
System.out.println(user.getName());
// 輸出:小明
}
}
User user =
new
User();
user.setId(
3
);
user.setName(
"小紅"
);
String json = JSON.toJSONString(user);
System.out.println(json);
// 輸出:{"id":3,"name":"小紅"}
高階功能
-
自動駝峰轉下劃線 :JSON.DEFFAULT_DATE_FORMAT =
"yyyy-MM-dd HH:mm:ss"
; -
動態欄位解析 :Map<String, Object> map = JSON.parseObject(json, Map.class);
優缺點
優點 | 缺點 |
---|---|
效能極高,解析速度快 | 曾有歷史安全漏洞的爭議 |
支援複雜的動態欄位解析 | 社群活躍度稍遜於 Jackson 和 Gson |
功能全面,適合大規模資料處理場景 | 配置選項和 API 比較多,稍顯複雜 |
4. 使用 JsonPath:快速提取巢狀欄位
功能特點
-
高效欄位提取 :透過路徑表示式(類似 XPath)快速提取巢狀欄位。 -
靈活性強 :支援動態欄位和條件過濾。 -
輕量級 :專注於欄位提取,功能簡單明確。
程式碼示例
import
com.jayway.jsonpath.JsonPath;
publicclassJsonPathExample
{
publicstaticvoidmain(String[] args)
{
String json =
""
"
{
"
store
": {
"
book
": [
{"
title
": "
書
1", "
price
": 10},
{"
title
": "
書
2", "
price
": 20}
]
}
}
"
""
;
// 提取第一個書籍的標題
String title = JsonPath.read(json,
"$.store.book[0].title"
);
System.out.println(title);
// 輸出:書1
// 提取所有書籍價格
List<Integer> prices = JsonPath.read(json,
"$.store.book[*].price"
);
System.out.println(prices);
// 輸出:[10, 20]
}
}
優缺點
優點 | 缺點 |
---|---|
欄位提取簡潔高效 | 不支援序列化和反序列化 |
動態欄位處理能力強 | 依賴 JsonPath 語法 |
適合快速提取巢狀欄位 | 不適合全量 JSON 轉換 |
5. 使用 org.json:輕量工具類
功能特點
-
輕量級 :核心是一個工具類,適合簡單場景。 -
構造和解析簡單 :適合快速建立 JSON 或提取欄位。 -
靈活性一般 :不支援複雜物件對映。
程式碼示例
import
org.json.JSONObject;
publicclassOrgJsonExample
{
publicstaticvoidmain(String[] args)
{
String json =
"{\"id\":1,\"name\":\"張三\"}"
;
// 提取欄位
JSONObject jsonObject =
new
JSONObject(json);
System.out.println(jsonObject.getString(
"name"
));
// 輸出:張三
// 構造 JSON
JSONObject newJson =
new
JSONObject();
newJson.put(
"id"
,
2
);
newJson.put(
"name"
,
"李四"
);
System.out.println(newJson.toString());
// 輸出:{"id":2,"name":"李四"}
}
}
優缺點
優點 | 缺點 |
---|---|
輕量級,適合簡單場景 | 不支援複雜巢狀物件 |
使用簡單,學習成本低 | 功能簡單,擴充套件性差 |
6. 手動解析 JSON:靈活度最高
功能特點
-
完全自由 :不依賴第三方庫,自己解析 JSON。 -
動態處理 :適合不規則欄位結構的 JSON。 -
程式碼複雜度高 :適合特殊場景。
程式碼示例
import
com.fasterxml.jackson.core.type.TypeReference;
import
com.fasterxml.jackson.databind.ObjectMapper;
import
java.util.Map;
publicclassManualParsing
{
publicstaticvoidmain(String[] args)throws Exception
{
String json =
"{\"id\":1,\"name\":\"動態欄位\"}"
;
ObjectMapper objectMapper =
new
ObjectMapper();
Map<String, Object> map = objectMapper.readValue(json,
new
TypeReference<Map<String, Object>>() {});
System.out.println(map.get(
"name"
));
// 輸出:動態欄位
}
}
優缺點
優點 | 缺點 |
---|---|
靈活性高,適合動態欄位 | 程式碼複雜度高,不易維護 |
不依賴第三方庫 | 效能和效率低於專業 JSON 庫 |
總結
方法 | 適用場景 | 優點 | 缺點 |
---|---|---|---|
Jackson | 企業級專案,複雜序列化和反序列化場景 | 功能強大,效能優異,支援複雜結構 | 配置複雜,學習曲線高 |
Gson | 中小型專案,簡單的 JSON 轉換場景 | 輕量級,簡單易用 | 功能有限,效能略遜 |
FastJSON | 高效能需求,大資料量的動態解析 | 效能極高,功能豐富 | 曾有安全漏洞爭議,社群支援稍遜 Jackson |
JsonPath | 巢狀結構複雜、動態欄位提取場景 | 欄位提取語法簡單,靈活性強 | 不支援序列化和反序列化 |
org.json | 快速解析或構造 JSON 場景 | 輕量級,適合簡單場景 | 功能單一,擴充套件性差 |
手動解析 | 動態 JSON 或欄位不固定的場景 | 自由度高,靈活性強 | 程式碼複雜,效率低於專業工具 |





