Java fastjson2 解析JSON用法詳解
Fastjson2 是 Fastjson 的升級版本,提供了更好的性能和擴展性,同時也在 API 和功能上做了很多改進。使用 Fastjson2 解析 JSON 數據非常簡單,支持多種方式來解析 JSON 字符串、嵌套 JSON 對象和數組、以及轉換成 Java 對象。下面詳細介紹 Fastjson2 的常見 JSON 解析用法。
1. 引入 Fastjson2 依賴
在使用 Fastjson2 之前,確保項目中包含相應的依賴。
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 字符串轉換為 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 數組
Fastjson2 也可以直接將 JSON 數組字符串解析為 JSONArray。你可以通過 parseArray() 或 parseObject() 方法來處理數組。
示例:解析 JSON 數組
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 數組解析為 List
JSONArray jsonArray = JSON.parseArray(jsonArrayString);
// 遍歷 JSON 數組并解析每個對象
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 內容
System.out.println(map); // 輸出: {name=John, age=25}
}
}2.5 解析 JSON 數據時的類型轉換
Fastjson2 支持復雜的類型轉換。你可以將 JSON 解析為 List、Map、以及任意的 Java 類型。
示例:JSON 轉換為 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 數組字符串解析為 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 中提取數據
Fastjson2 提供了 JSONPath 功能,支持復雜的查詢操作,類似于 XPath 的功能。可以使用 JSONPath.eval() 來提取 JSON 數據。
示例:使用 JSONPath 提取 JSON 數據
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 設置自定義的日期格式,通過 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();
// 設置自定義日期格式
SerializeConfig config = new SerializeConfig();
config.put(Date.class, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
// 將日期對象轉換為 JSON 字符串
String jsonString = JSON.toJSONString(date, config);
System.out.println(jsonString); // 輸出: 2025-01-13 14:30:00
}
}3.3 反序列化時處理空字段
Fastjson2 在反序列化 JSON 時,如果某些字段為空或者不存在,它會自動跳過該字段并不會拋出異常。你可以使用 @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 字符串時忽略空字段
Person person = JSON.parseObject(jsonString, Person.class);
System.out.println(person.getName()); // 輸出: John
System.out.println(person.getAge()); // 輸出: 0 (默認值)
}
}
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. 總結
Fastjson2 提供了強大且簡潔的 JSON 解析功能,包括:
- 輕松將 JSON 字符串解析為 Java 對象或
Map。 - 支持嵌套的 JSON 對象、數組和復雜類型的解析。
- 支持通過
JSONPath從 JSON 數據中提取數據。 - 自定義日期格式和序列化配置。
- 處理反序列化時的空字段、字段過濾等。
這些特性使得 Fastjson2 成為一個高效且功能豐富的 JSON 解析工具,適用于各種不同的 Java 應用場景。
到此這篇關于java fastjson2 解析JSON用法解析的文章就介紹到這了,更多相關java fastjson2 解析JSON內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器
這篇文章主要介紹了繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11

