什麼是fastjson?
Fastjson是一個Java語言編寫的高性能功能完善的JSON庫。它採用一種“假定有序快速匹配”的算法,把JSON Parse的性能提升到極致,是目前Java語言中最快的JSON庫。Fastjson接口簡單易用,已經被廣泛使用在緩存序列化、協議交互、Web輸出、Android客戶端等多種應用場景。
主要特點:
- 快速FAST (比其它任何基於Java的解析器和生成器更快,包括jackson)
- 強大(支持普通JDK類包括任意Java Bean Class、Collection、Map、Date或enum)
- 零依賴(沒有依賴其它任何類庫除了JDK)
背景
最近關於fastjson的消息,引起了很多人的關注!
fastjson爆出重大漏洞,攻擊者可使整個業務癱瘓
漏洞描述
常用JSON組件FastJson存在遠程代碼執行漏洞,攻擊者可通過精心構建的json報文對目標服務器執行任意命令,從而獲得服務器權限。此次爆發的漏洞為以往漏洞中autoType的繞過。
影響範圍
FastJson < 1.2.48
很多開發者才猛然發現,fastjson已經深入到我們開發工作的方方面面。那麼除了趕快升級你的json外,我們來挖挖fastjson最常用的用法。
fastjson常用方式
1.maven依賴(記得升級到1.2.48以上版本哦)
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
2.FastJson對於json格式字符串的解析主要用到了一下三個類:
(1)JSON:fastJson的解析器,用於JSON格式字符串與JSON對象及javaBean之間的轉換。
(2)JSONObject:fastJson提供的json對象。
(3)JSONArray:fastJson提供json數組對象。
3.常用方式
3.1 string和java對象
實例1:對象轉json字符串
Map<String,String> map=new HashMap<String,String>(); map.put("code","0"); map.put("message","ok"); String json=JSON.toJSONString(map); System.out.println(json);
輸出結果為:
{"code":"0","message":"ok"}
實例2:字符串轉對象
Map<String,String> map=new HashMap<String,String>(); map.put("code","0"); map.put("message","ok"); String json=JSON.toJSONString(map); System.out.println(json); Map obj=(Map)JSON.parse(json); System.out.println("code="+obj.get("code")+",message="+obj.get("message"));
輸出結果
{"code":"0","message":"ok"}
code=0,message=ok
3.2 工具類JSONObject
public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); map.put("code","0"); map.put("message","ok"); String json=JSON.toJSONString(map); System.out.println(json); Map obj=(Map)JSON.parse(json); System.out.println("code="+obj.get("code")+",message="+obj.get("message")); String code=JSON.parseObject(json).getString("code"); String message=JSON.parseObject(json).getString("message"); System.out.println("code="+code+",message="+message); }
輸出結果
{"code":"0","message":"ok"} code=0,message=ok code=0,message=ok
3.3 數組對象
List<user> list=new ArrayList<user>(JSONArray.parseArray(jsonString,user.class));
Fastjson 與各種JSON庫的性能比較:
json庫 | 序列化性能 | 反序列化性能 | jar大小 |
fastjson | 1201 | 1216 | fastjson-1.1.26.jar(356k) fastjson-1.1.25-android.jar(226k) |
jackson | 1408 | 1915 | jackson-annotations-2.1.1.jar(34k) jackson-core-2.1.1.jar(206k) jackson-databind-2.1.1.jar(922k) 總共1162k |
gson | 7421 | 5065 | gson-2.2.2.jar(189k) |
json-lib | 27555 | 87292 | json-lib-2.4-jdk15.jar(159k) |
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整