JSON.toJSONString()方法在Java中的使用方法及應(yīng)用場(chǎng)景
前言
在Java開發(fā)中,JSON(JavaScript Object Notation)作為一種輕量級(jí)的數(shù)據(jù)交換格式被廣泛應(yīng)用于前后端交互以及數(shù)據(jù)存儲(chǔ)場(chǎng)景。阿里巴巴開源的fastjson庫(kù)提供了一個(gè)簡(jiǎn)單易用且高效的JSON處理方式,其中com.alibaba.fastjson.JSON.toJSONString()
方法用于將Java對(duì)象轉(zhuǎn)換為JSON字符串,本文將詳細(xì)解讀其用法及應(yīng)用場(chǎng)景。
一、引入依賴
首先,確保你的項(xiàng)目已經(jīng)引入了Fastjson庫(kù),Maven配置如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
二、JSON.toJSONString()方法詳解
JSON.toJSONString()
方法的主要功能是將Java對(duì)象轉(zhuǎn)換成JSON字符串格式。基本語(yǔ)法如下:
import com.alibaba.fastjson.JSON; // 假設(shè)有一個(gè)User對(duì)象 public class User { private String name; private int age; // 省略getter和setter方法... } // 創(chuàng)建一個(gè)User對(duì)象實(shí)例 User user = new User(); user.setName("Tom"); user.setAge(25); // 使用JSON.toJSONString()方法轉(zhuǎn)換為JSON字符串 String jsonString = JSON.toJSONString(user);
上述代碼執(zhí)行后,jsonString
變量將保存如下的JSON字符串:
{ "name": "Tom", "age": 25 }
此方法支持序列化大部分Java類型,包括基礎(chǔ)類型、集合、數(shù)組、Map以及自定義對(duì)象等。
三、高級(jí)用法
序列化時(shí)排除某些字段
如果不想將對(duì)象的某個(gè)屬性轉(zhuǎn)化為JSON字符串,可以通過(guò)
@JSONField(serialize=false)
注解來(lái)標(biāo)記。public class User { @JSONField(serialize=false) private String password; // 不序列化密碼字段 // 其他字段和方法... }
日期格式化
默認(rèn)情況下,fastjson會(huì)將Java.util.Date對(duì)象轉(zhuǎn)為時(shí)間戳。如果你需要特定的日期格式,可以在調(diào)用
toJSONString()
方法時(shí)傳入SerializerFeature.WriteDateUseDateFormat
參數(shù),并設(shè)置全局日期格式。FastJsonConfig config = new FastJsonConfig(); config.setDateFormat("yyyy-MM-dd HH:mm:ss"); String jsonString = JSON.toJSONString(user, config.getFeatures());
防止XSS攻擊
fastjson提供了一個(gè)特性可以自動(dòng)過(guò)濾HTML標(biāo)簽,防止XSS攻擊,通過(guò)
SerializerFeature.HtmlEscape
參數(shù)開啟。List<SerializerFeature> features = new ArrayList<>(); features.add(SerializerFeature.HtmlEscape); String jsonString = JSON.toJSONString(user, features.toArray(new SerializerFeature[0]));
結(jié)語(yǔ)
JSON.toJSONString()
方法是Java開發(fā)中進(jìn)行JSON序列化的常用手段,借助fastjson庫(kù)提供的豐富功能,我們可以輕松地處理各種復(fù)雜對(duì)象到JSON字符串的轉(zhuǎn)換,從而滿足前后端數(shù)據(jù)交互的需求。同時(shí),注意在實(shí)際開發(fā)過(guò)程中根據(jù)業(yè)務(wù)需求選擇合適的序列化策略,保證數(shù)據(jù)安全性和有效性。
補(bǔ)充:JSON.toJSONString()空字段不忽略修改
使用JSON.toJSONString(object)方法,返回的json中,null對(duì)應(yīng)的key已經(jīng)被過(guò)濾掉,這是因?yàn)槟J(rèn)會(huì)將為空的字段自動(dòng)忽略,這明顯不是我們想要的結(jié)果。 去掉JSON.toJSONString()空字段忽略方法兩個(gè)如下
- 方法一
SerializerFeature序列化屬性
String s = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
QuoteFieldNames———-輸出key時(shí)是否使用雙引號(hào),默認(rèn)為true
WriteMapNullValue——–是否輸出值為null的字段,默認(rèn)為false
WriteNullNumberAsZero—-數(shù)值字段如果為null,輸出為0,而非null
WriteNullListAsEmpty—–List字段如果為null,輸出為[],而非null
WriteNullStringAsEmpty—字符類型字段如果為null,輸出為”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果為null,輸出為false,而非nul
- 方法二
加上這個(gè)過(guò)濾器后,所有的null和"“串都會(huì)被轉(zhuǎn)換成”"值輸出到字符串中
private static ValueFilter valueFilter = (o, s, o1) -> o1 == null ? "" : o1; public static void main(String[] args) { User user = new User(); String s = JSON.toJSONString(user, valueFilter); System.out.println(s); }
- 測(cè)試代碼如下
private static ValueFilter valueFilter = (o, s, o1) -> o1 == null ? "" : o1; public static void main(String[] args) { User user = new User(); String s1 = JSON.toJSONString(user); System.out.println(s1); String s2 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty); System.out.println(s2); String s3 = JSON.toJSONString(user, valueFilter); System.out.println(s3); }
- 測(cè)試結(jié)果如下
總結(jié)
到此這篇關(guān)于JSON.toJSONString()方法在Java中的使用方法及應(yīng)用場(chǎng)景的文章就介紹到這了,更多相關(guān)Java中JSON.toJSONString()方法使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中的String不可變性實(shí)現(xiàn)
- Java中的StringTokenizer實(shí)現(xiàn)字符串切割詳解
- Java中的String、StringBuilder、StringBuffer三者的區(qū)別詳解
- Java的String類中的startsWith方法和endsWith方法示例詳解
- Java中的StringJoiner類使用示例深入詳解
- Java中的StringBuilder()常見方法詳解
- java8中的List<String>轉(zhuǎn)List<Integer>的實(shí)例代碼
- Java中如何取出String字符串括號(hào)中的內(nèi)容
- Java中的StringUtils引入及使用示例教程
- 深入理解Java中的String(示例詳解)
相關(guān)文章
關(guān)于自定義過(guò)濾器獲取不到session問題
這篇文章主要介紹了關(guān)于自定義過(guò)濾器獲取不到session問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java并發(fā)編程之阻塞隊(duì)列(BlockingQueue)詳解
這篇文章主要介紹了詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理,阻塞隊(duì)列是Java util.concurrent包下重要的數(shù)據(jù)結(jié)構(gòu),有興趣的可以了解一下2021-09-09SpringMVC Json自定義序列化和反序列化的操作方法
這篇文章主要介紹了SpringMVC Json自定義序列化和反序列化的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Java兩個(gè)List<T> 求交集,差集,并集,去重后的并集
本文主要介紹了Java兩個(gè)List<T> 求交集,差集,并集,去重后的并集,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04SpringBoot實(shí)現(xiàn)MapperScan添加動(dòng)態(tài)配置(占位符)
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)MapperScan添加動(dòng)態(tài)配置(占位符),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01