golang常用json庫的選擇

Sonic

如果對性能要求非常高,可以使用Sonic。但是Sonic有一些要求,高性能必然帶來特例化,官方也介紹了,對CPU架構和系統等都有要求。其底層使用了一些彙編和c的代碼實現,所以如果不是對性能要求特別高,可以不用。

fastjson

fastjson介紹就是非常快,不過功能相對較少。好久已經不維護了。

encoding/json

官方自帶的json庫。好處就是官方自帶,不需要額外的第三方庫。缺點就是性能不高。很多資料也都介紹了,使用了大量映射,開發便捷,犧牲了性能。並且需要指定結構體序列化出來,相對來說不夠靈活。

GJSON

GJSON非常靈活,甚至可以通過通配符查找字段,其實現也說明了一切,GJSON是通過字符匹配查找的方式獲取數值的。不能校驗json

jsonparser

jsonparser與GJSON實現類似,通過字符匹配獲取數值,不能校驗json。

不能把結構體轉成json

go-simplejson

go-simplejson底層是使用系統庫的部分功能實現的,所以只是對系統庫的封裝。

easyjson

easyjson好久不維護了,並且使用起來比較麻煩,寫好json對應的結構體,還要在使用easyjson轉成需要的方法。

json-iterator

json-iterator的好處就是與官方的encoding/json完全兼容,不需要修改原來的代碼邏輯。同樣不太方便的就是必須要序列化到結構體使用。底層實現使用了與encoding/json不同的方案,所以性能比encoding/json要好。json-iterator屬於比較中庸的一個json庫,也是一直在維護,github上star最多的第三方json庫之一,另一個是GJSON,所以如果沒有特殊需求,比如高性能、多讀少寫、多寫少讀等,可以選擇使用json-iterator。

go-json

也是與官方json兼容。

除此之外還有很多json庫,比如ffjson等。

總結

如果只是啓動讀取配置文件,或者偶爾解析json,官方的encoding/json完全足夠用了。如果沒有特殊需求,只是正常使用,json-iterator也是不錯的選擇,因爲其用戶廣泛,一直在維護,與官方json兼容

fastjson ffjson已經很久不維護了,所以排除掉

Sonic太特殊了,目前沒有這種性能需求

GJSON jsonparser都是字符匹配的方式,獲取數據很快,但是重複獲取需要重複搜索字符

所以最終選擇json-iterator作爲golang的json庫,因爲其與官方兼容,所以寫法一樣,性能還有所提高,肯定要替換官方的。其他的有的是太久不維護;有的是功能不全(比如結構體和json的轉換等);有的是某些場景性能好,某些場景相差比較大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章