編程小知識(shí)【java-0011】java常用開發(fā)庫-json庫
常用的 JSON 類庫:
FastJson: 阿里巴巴開發(fā)的 JSON 庫,性能優(yōu)秀。
Jackson: 社區(qū)十分活躍且更新速度很快。
Gson: 谷歌開發(fā)的 JSON 庫,功能十分全面。
FastJson
Fastjson 是一個(gè) Java 庫,可以將 Java 對(duì)象轉(zhuǎn)換為 JSON 格式,當(dāng)然它也可以將 JSON 字符串轉(zhuǎn)換為 Java 對(duì)象。
優(yōu)點(diǎn):
提供服務(wù)器端、安卓客戶端兩種解析工具,性能表現(xiàn)較好。
提供了 toJSONString() 和 parseObject() 方法來將 Java 對(duì)象與 JSON 相互轉(zhuǎn)換。調(diào)用toJSONString方 法即可將對(duì)象轉(zhuǎn)換成 JSON 字符串,parseObject 方法則反過來將 JSON 字符串轉(zhuǎn)換成對(duì)象。
允許轉(zhuǎn)換預(yù)先存在的無法修改的對(duì)象(只有class、無源代碼)。
Java泛型的廣泛支持。
允許對(duì)象的自定義表示、允許自定義序列化類。
支持任意復(fù)雜對(duì)象(具有深厚的繼承層次和廣泛使用的泛型類型)。
缺點(diǎn):
FastJson 源碼質(zhì)量較低
FastJson Bug、漏洞較多
FastJson 犧牲多數(shù)場(chǎng)景下的穩(wěn)定性而提高的效率
ps:fastjson2在2022年發(fā)布了,它是fastjson的重要升級(jí),目標(biāo)是為下一個(gè)十年提供一個(gè)高性能的JSON庫, fastjson2性能相比原先舊的 fastjson有了很大提升,并且 fastjson2更安全,完全刪除autoType白名單,提升了安全性。但是是否像官方說的那樣有巨大提升,我們還要拭目以待。
JackSon
3個(gè)核心模塊:
Streaming: jackson-core jar,定義了底層的streaming API和實(shí)現(xiàn)了Json特性。
Annotations: jackson-annotations jar,包含了標(biāo)準(zhǔn)的Jackson注解。本文暫不介紹。
Databind: jackson-databind jar,實(shí)現(xiàn)了數(shù)據(jù)綁定和對(duì)象序列化,它依賴于streaming和annotations的包。
優(yōu)點(diǎn):
性能較高,解析速度快。
支持多種數(shù)據(jù)格式,包括JSON、XML、YAML等。
支持?jǐn)?shù)據(jù)綁定,可以將JSON數(shù)據(jù)直接綁定到Java對(duì)象上。
支持注解,可以通過注解來控制序列化和反序列化的過程。
社區(qū)活躍,文檔齊全,使用廣泛。
缺點(diǎn):
配置較為復(fù)雜,需要掌握較多的API。
對(duì)于復(fù)雜的數(shù)據(jù)結(jié)構(gòu),需要手動(dòng)編寫代碼來處理。
Gson
Gson是谷歌開發(fā)的 JSON 庫,目前功能最全的 JSON 庫,它可以將Java對(duì)象轉(zhuǎn)換為相應(yīng)的JSON形式,也可以將JSON字符串轉(zhuǎn)換為對(duì)應(yīng)的Java對(duì)象。 Gson可以使用任意Java對(duì)象,包括哪些預(yù)先存在的、不在你的源代碼中的對(duì)象(因此,你并不知道對(duì)象的屬性)。
優(yōu)點(diǎn):
輕量
簡(jiǎn)潔
功能全面
缺點(diǎn):
性能對(duì)比Fastjson、jackson稍差