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

使用Fastjson進行JSON生成與解析的新手指南

 更新時間:2025年04月07日 09:13:04   作者:五行星辰  
Fastjson是阿里巴巴開源的高性能 JSON 庫,適用于 Java 對象的序列化和反序列化,本文將詳細介紹一下如何使用Fastjson進行json的生成與解析吧

Fastjson 是阿里巴巴開源的高性能 JSON 庫,適用于 Java 對象的序列化(生成 JSON)和反序列化(解析 JSON)。以下是詳細使用指南:

1. 添加依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.39</version> <!-- 使用最新安全版本 -->
</dependency>

2. 基礎(chǔ)用法

2.1 對象轉(zhuǎn) JSON(序列化)

import com.alibaba.fastjson.JSON;

User user = new User("張三", 25);
String json = JSON.toJSONString(user);
// 輸出:{"name":"張三","age":25}

2.2 JSON 轉(zhuǎn)對象(反序列化)

String json = "{\"name\":\"李四\",\"age\":30}";
User user = JSON.parseObject(json, User.class);

3. 常用注解

3.1 字段控制

public class User {
    @JSONField(name = "user_name")  // 自定義字段名
    private String name;

    @JSONField(serialize = false)   // 忽略字段
    private String password;

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")  // 日期格式化
    private Date createTime;
}

3.2 序列化順序

@JSONType(orders = {"id", "name", "age"}) // 指定字段順序
public class User {
    private Long id;
    private String name;
    private Integer age;
}

4. 高級配置

4.1 全局配置

// 序列化配置
SerializeConfig config = new SerializeConfig();
config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd"));

// 反序列化配置
ParserConfig parserConfig = new ParserConfig();
parserConfig.setSafeMode(true); // 啟用安全模式防漏洞

String json = JSON.toJSONString(obj, config);
User user = JSON.parseObject(json, User.class, parserConfig);

4.2 自定義序列化/反序列化

public class MoneySerializer implements ObjectSerializer {
    @Override
    public void write(
        JSONSerializer serializer, 
        Object value, 
        Object fieldName, 
        Type fieldType, 
        int features
    ) {
        BigDecimal amount = (BigDecimal) value;
        serializer.write(amount.setScale(2) + "元");
    }
}

???????// 注冊自定義序列化器
SerializeConfig.getGlobalInstance().put(BigDecimal.class, new MoneySerializer());

5. 處理復(fù)雜場景

5.1 泛型集合

// 序列化
List<User> users = Arrays.asList(new User("張三"), new User("李四"));
String json = JSON.toJSONString(users);

// 反序列化
List<User> parsedUsers = JSON.parseArray(json, User.class);

5.2 循環(huán)引用處理

// 禁用循環(huán)檢測(默認開啟,可能導(dǎo)致StackOverflow)
String json = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);

5.3 忽略未知字段

User user = JSON.parseObject(json, User.class, Feature.IgnoreNotMatch);

6. 性能優(yōu)化

6.1 禁用特性檢查

// 提升序列化速度(犧牲嚴格校驗)
String json = JSON.toJSONString(obj, 
    SerializerFeature.WriteMapNullValue, 
    SerializerFeature.DisableCheckSpecialChar
);

6.2 使用JSONWriter處理大文件

try (JSONWriter writer = new JSONWriter(new FileWriter("large.json"))) {
    writer.startArray();
    for (User user : users) {
        writer.writeValue(user);
    }
    writer.endArray();
}

7. 安全防護

7.1 啟用安全模式

ParserConfig.getGlobalInstance().setSafeMode(true); // 禁止反序列化任意類

7.2 白名單控制

// 只允許反序列化指定類
ParserConfig.getGlobalInstance().addAccept("com.example.model.");

8. 與 Spring 集成

替換 Spring MVC 默認 JSON 處理器

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        converter.setFastJsonConfig(fastJsonConfig());
        converters.add(0, converter);
    }

    private FastJsonConfig fastJsonConfig() {
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(SerializerFeature.PrettyFormat);
        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        return config;
    }
}

9. 常見問題解決

9.1 日期格式不匹配

// 全局配置日期格式
JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
String json = JSON.toJSONString(new Date()); // 輸出 "2023-01-01"

9.2 字段名大小寫問題

// 駝峰轉(zhuǎn)下劃線命名
Model model = new Model();
model.setUserName("test");
String json = JSON.toJSONString(model, SerializerFeature.UseSnakeCase);
// 輸出 {"user_name":"test"}

9.3 處理枚舉類型

public enum Status {
    @JSONField(name = "OK")  // 自定義枚舉值名稱
    SUCCESS,
    @JSONField(name = "ERR")
    FAILED
}

String json = JSON.toJSONString(Status.SUCCESS); // 輸出 "OK"

10. 性能對比建議

場景推薦方案
高并發(fā)接口Fastjson 默認配置 + 安全模式
復(fù)雜嵌套對象禁用循環(huán)引用檢測 + 緩存配置
處理超大 JSON 文件使用 JSONReader/JSONWriter
需要嚴格類型安全啟用安全模式 + 白名單控制

11.注意事項

  • 版本安全:始終使用官方最新版本(Maven 倉庫),避免歷史漏洞。
  • 數(shù)據(jù)來源:反序列化外部輸入時,務(wù)必啟用安全模式或白名單。
  • 線程安全:ParserConfig 和 SerializeConfig 建議全局單例。
  • 兼容性:Fastjson 與其他 JSON 庫混用時,注意注解沖突問題。

通過合理配置,F(xiàn)astjson 能以接近極限的性能處理 JSON 數(shù)據(jù),但需在功能、安全、性能之間做好權(quán)衡。

到此這篇關(guān)于使用Fastjson進行JSON生成與解析的新手指南的文章就介紹到這了,更多相關(guān)Fastjson處理JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java嵌套for循環(huán)優(yōu)化方案分享

    Java嵌套for循環(huán)優(yōu)化方案分享

    介紹了Java中嵌套for循環(huán)的優(yōu)化方法,包括減少循環(huán)次數(shù)、合并循環(huán)、使用更高效的數(shù)據(jù)結(jié)構(gòu)、并行處理、預(yù)處理和緩存、算法優(yōu)化、盡量減少對象創(chuàng)建以及本地變量優(yōu)化,通過這些方法,可以顯著提升程序的執(zhí)行效率,文章還以動態(tài)規(guī)劃優(yōu)化示例——最長遞增子序列
    2025-03-03
  • Java實現(xiàn)在線考試系統(tǒng)與設(shè)計(學(xué)生功能)

    Java實現(xiàn)在線考試系統(tǒng)與設(shè)計(學(xué)生功能)

    這篇文章主要介紹了Java實現(xiàn)在線考試系統(tǒng)與設(shè)計(學(xué)生功能),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • IDEA無法識別SpringBoot項目的簡單解決辦法

    IDEA無法識別SpringBoot項目的簡單解決辦法

    今天使用idea的時候,遇到idea無法啟動springboot,所以這篇文章主要給大家介紹了關(guān)于IDEA無法識別SpringBoot項目的簡單解決辦法,需要的朋友可以參考下
    2023-08-08
  • Java輕松掌握面向?qū)ο蟮娜筇匦苑庋b與繼承和多態(tài)

    Java輕松掌握面向?qū)ο蟮娜筇匦苑庋b與繼承和多態(tài)

    本文主要講述的是面向?qū)ο蟮娜筇匦裕悍庋b,繼承,多態(tài),內(nèi)容含括從封裝到繼承再到多態(tài)的所有重點內(nèi)容以及使用細節(jié)和注意事項,內(nèi)容有點長,請大家耐心看完
    2022-05-05
  • JDK SPI機制以及自定義SPI類加載問題

    JDK SPI機制以及自定義SPI類加載問題

    這篇文章主要介紹了JDK SPI機制以及自定義SPI類加載問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • @RequestBody獲取不到參數(shù)的問題

    @RequestBody獲取不到參數(shù)的問題

    這篇文章主要介紹了@RequestBody獲取不到參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 啟動異常invalid constant type:15的解決方案

    啟動異常invalid constant type:15的解決方案

    今天小編就為大家分享一篇關(guān)于啟動異常invalid constant type:15的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 一文帶你掌握Java ImageIO類

    一文帶你掌握Java ImageIO類

    Java中的ImageIO類是Java標準庫中用于處理圖像的一個非常常用的 API,它提供了讀取和寫入多種常見圖像格式的功能,如JPEG、PNG、BMP、GIF等,本文將全面詳細地介紹Java中的ImageIO類的使用方法,需要的朋友可以參考下
    2023-05-05
  • springboot+vue實現(xiàn)登錄功能

    springboot+vue實現(xiàn)登錄功能

    這篇文章主要為大家詳細介紹了springboot+vue實現(xiàn)登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • spring整合struts2過程詳解

    spring整合struts2過程詳解

    這篇文章主要介紹了spring整合struts2過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論