Java fastjson2 解析JSON用法詳解
Fastjson2
是 Fastjson
的升級版本,提供了更好的性能和擴(kuò)展性,同時(shí)也在 API 和功能上做了很多改進(jìn)。使用 Fastjson2
解析 JSON 數(shù)據(jù)非常簡單,支持多種方式來解析 JSON 字符串、嵌套 JSON 對象和數(shù)組、以及轉(zhuǎn)換成 Java 對象。下面詳細(xì)介紹 Fastjson2
的常見 JSON 解析用法。
1. 引入 Fastjson2 依賴
在使用 Fastjson2
之前,確保項(xiàng)目中包含相應(yīng)的依賴。
Maven 依賴
<dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.31</version> <!-- 使用最新版本 --> </dependency>
Gradle 依賴
implementation 'com.alibaba.fastjson2:fastjson2:2.0.31'
2. JSON 解析
2.1 解析 JSON 字符串為 Java 對象
Fastjson2
使用 JSON.parseObject()
方法將 JSON 字符串轉(zhuǎn)換為 Java 對象。
示例:將 JSON 字符串解析為 Java 對象
import com.alibaba.fastjson2.JSON; public class Fastjson2Example { public static void main(String[] args) { String jsonString = "{\"name\":\"John\",\"age\":25}"; // 解析 JSON 字符串為 Java 對象 Person person = JSON.parseObject(jsonString, Person.class); System.out.println(person.getName()); // 輸出: John System.out.println(person.getAge()); // 輸出: 25 } } class Person { private String name; private int age; // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
2.2 解析嵌套的 JSON 對象
Fastjson2
可以直接解析嵌套的 JSON 對象。你可以通過 getJSONObject()
獲取嵌套的 JSONObject
,然后再繼續(xù)解析它。
示例:解析嵌套的 JSON 對象
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; public class Fastjson2Example { public static void main(String[] args) { String jsonString = "{\"name\":\"John\",\"address\":{\"city\":\"Anytown\",\"street\":\"123 Main St\"}}"; // 解析 JSON 字符串為 JSONObject JSONObject jsonObject = JSON.parseObject(jsonString); // 獲取嵌套的 JSON 對象 (address) JSONObject address = jsonObject.getJSONObject("address"); String city = address.getString("city"); String street = address.getString("street"); System.out.println("City: " + city); // 輸出: Anytown System.out.println("Street: " + street); // 輸出: 123 Main St } }
2.3 解析 JSON 數(shù)組
Fastjson2
也可以直接將 JSON 數(shù)組字符串解析為 JSONArray
。你可以通過 parseArray()
或 parseObject()
方法來處理數(shù)組。
示例:解析 JSON 數(shù)組
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; public class Fastjson2Example { public static void main(String[] args) { String jsonArrayString = "[{\"name\":\"John\",\"age\":25}, {\"name\":\"Jane\",\"age\":28}]"; // 將 JSON 數(shù)組解析為 List JSONArray jsonArray = JSON.parseArray(jsonArrayString); // 遍歷 JSON 數(shù)組并解析每個(gè)對象 for (int i = 0; i < jsonArray.size(); i++) { Person person = jsonArray.getObject(i, Person.class); System.out.println(person.getName() + " - " + person.getAge()); } } }
2.4 解析 JSON 字符串為 Map
如果你不需要將 JSON 解析為特定的 Java 對象,可以直接解析為 Map
或 List
。
示例:將 JSON 解析為 Map
import com.alibaba.fastjson2.JSON; import java.util.Map; public class Fastjson2Example { public static void main(String[] args) { String jsonString = "{\"name\":\"John\",\"age\":25}"; // 將 JSON 解析為 Map Map<String, Object> map = JSON.parseObject(jsonString, Map.class); // 輸出 Map 內(nèi)容 System.out.println(map); // 輸出: {name=John, age=25} } }
2.5 解析 JSON 數(shù)據(jù)時(shí)的類型轉(zhuǎn)換
Fastjson2
支持復(fù)雜的類型轉(zhuǎn)換。你可以將 JSON 解析為 List
、Map
、以及任意的 Java 類型。
示例:JSON 轉(zhuǎn)換為 List
和 Map
import com.alibaba.fastjson2.JSON; import java.util.List; import java.util.Map; public class Fastjson2Example { public static void main(String[] args) { String jsonArrayString = "[{\"name\":\"John\",\"age\":25}, {\"name\":\"Jane\",\"age\":28}]"; // 將 JSON 數(shù)組字符串解析為 List List<Map<String, Object>> personList = JSON.parseArray(jsonArrayString, Map.class); System.out.println(personList); // 輸出: [{name=John, age=25}, {name=Jane, age=28}] } }
3. 高級功能
3.1 使用 JSONPath 從 JSON 中提取數(shù)據(jù)
Fastjson2
提供了 JSONPath
功能,支持復(fù)雜的查詢操作,類似于 XPath 的功能。可以使用 JSONPath.eval()
來提取 JSON 數(shù)據(jù)。
示例:使用 JSONPath
提取 JSON 數(shù)據(jù)
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONPath; public class Fastjson2Example { public static void main(String[] args) { String jsonString = "{\"name\":\"John\", \"address\":{\"city\":\"Anytown\",\"street\":\"123 Main St\"}}"; // 使用 JSONPath 提取城市信息 Object city = JSONPath.eval(JSON.parse(jsonString), "$.address.city"); System.out.println("City: " + city); // 輸出: Anytown } }
3.2 處理自定義日期格式
你可以為 Fastjson2
設(shè)置自定義的日期格式,通過 SerializeConfig
配置。
示例:自定義日期格式
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.serializer.SerializeConfig; import java.text.SimpleDateFormat; import java.util.Date; public class Fastjson2Example { public static void main(String[] args) { Date date = new Date(); // 設(shè)置自定義日期格式 SerializeConfig config = new SerializeConfig(); config.put(Date.class, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); // 將日期對象轉(zhuǎn)換為 JSON 字符串 String jsonString = JSON.toJSONString(date, config); System.out.println(jsonString); // 輸出: 2025-01-13 14:30:00 } }
3.3 反序列化時(shí)處理空字段
Fastjson2
在反序列化 JSON 時(shí),如果某些字段為空或者不存在,它會自動跳過該字段并不會拋出異常。你可以使用 @JSONField
注解來控制字段的序列化和反序列化行為。
示例:處理空字段
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.annotation.JSONField; public class Fastjson2Example { public static void main(String[] args) { String jsonString = "{\"name\":\"John\",\"age\":null}"; // 解析 JSON 字符串時(shí)忽略空字段 Person person = JSON.parseObject(jsonString, Person.class); System.out.println(person.getName()); // 輸出: John System.out.println(person.getAge()); // 輸出: 0 (默認(rèn)值) } } class Person { private String name; @JSONField(serialize = false) // 不序列化 private int age; // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
4. 總結(jié)
Fastjson2
提供了強(qiáng)大且簡潔的 JSON 解析功能,包括:
- 輕松將 JSON 字符串解析為 Java 對象或
Map
。 - 支持嵌套的 JSON 對象、數(shù)組和復(fù)雜類型的解析。
- 支持通過
JSONPath
從 JSON 數(shù)據(jù)中提取數(shù)據(jù)。 - 自定義日期格式和序列化配置。
- 處理反序列化時(shí)的空字段、字段過濾等。
這些特性使得 Fastjson2
成為一個(gè)高效且功能豐富的 JSON 解析工具,適用于各種不同的 Java 應(yīng)用場景。
到此這篇關(guān)于java fastjson2 解析JSON用法解析的文章就介紹到這了,更多相關(guān)java fastjson2 解析JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)雙色球機(jī)選號碼生成器
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)雙色球機(jī)選號碼生成器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器
這篇文章主要介紹了繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Java中讓界面內(nèi)的時(shí)間及時(shí)更新示例代碼
這篇文章主要給大家介紹了關(guān)于Java中讓界面內(nèi)的時(shí)間及時(shí)更新的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09