欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java fastjson2 解析JSON用法詳解

 更新時(shí)間:2025年02月11日 10:26:03   作者:風(fēng)_流沙  
Fastjson2是Fastjson的升級版,提供了更好的性能和擴(kuò)展性,它支持多種方式解析JSON數(shù)據(jù),包括將JSON字符串轉(zhuǎn)換為Java對象、嵌套的JSON對象和數(shù)組,以及轉(zhuǎn)換成Map或List,本文介紹Java fastjson2 解析JSON用法,感興趣的朋友一起看看吧

Fastjson2Fastjson 的升級版本,提供了更好的性能和擴(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 對象,可以直接解析為 MapList

示例:將 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)換為 ListMap

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)詳解

    Java雪花算法的實(shí)現(xiàn)詳解

    雪花算法(Snowflake)是一種分布式唯一ID生成算法,用于生成全局唯一的ID,使用雪花算法生成的ID通常是一個(gè)64位的整數(shù),可以根據(jù)需要進(jìn)行轉(zhuǎn)換和展示,在Java等編程語言中,可以使用相應(yīng)的庫或工具來生成雪花算法的ID,本文給大家介紹了Java雪花算法的實(shí)現(xiàn)
    2023-11-11
  • java實(shí)現(xiàn)簡單年齡計(jì)算器

    java實(shí)現(xiàn)簡單年齡計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單年齡計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java實(shí)現(xiàn)雙色球機(jī)選號碼生成器

    java實(shí)現(xiàn)雙色球機(jī)選號碼生成器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)雙色球機(jī)選號碼生成器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器

    繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器

    這篇文章主要介紹了繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java虛擬機(jī)啟動過程探索

    Java虛擬機(jī)啟動過程探索

    當(dāng)我們在編寫Java應(yīng)用的時(shí)候,很少會注意Java程序是如何被運(yùn)行的,如何被操作系統(tǒng)管理和調(diào)度的,帶著好奇心,探索一下Java虛擬機(jī)啟動過程
    2022-05-05
  • Java NIO異步文件通道原理及用法解析

    Java NIO異步文件通道原理及用法解析

    這篇文章主要介紹了Java NIO異步文件通道原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringMVC中的請求參數(shù)接收方式

    SpringMVC中的請求參數(shù)接收方式

    這篇文章主要介紹了SpringMVC中的請求參數(shù)接收方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java中讓界面內(nèi)的時(shí)間及時(shí)更新示例代碼

    Java中讓界面內(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
  • JVM內(nèi)置函數(shù)Intrinsics介紹

    JVM內(nèi)置函數(shù)Intrinsics介紹

    這篇文章主要介紹了JVM內(nèi)置函數(shù)Intrinsics,我們將學(xué)習(xí)什么是intrinsics(內(nèi)部/內(nèi)置函數(shù)),以及它們?nèi)绾卧贘ava和其他基于JVM的語言中工作,需要的朋友可以參考一下
    2022-02-02
  • 使用springboot單例模式與線程安全問題踩的坑

    使用springboot單例模式與線程安全問題踩的坑

    這篇文章主要介紹了使用springboot單例模式與線程安全問題踩的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論