json庫(kù)在golang中的使用

golang對(duì)json序列化和反序列化的操作實(shí)在是難受墅茉,所以說(shuō)用習(xí)慣了高級(jí)語(yǔ)言特性伟阔,再轉(zhuǎn)到這些偏原生的寫法上就會(huì)很難受搭综。

不多BB,開(kāi)始記錄站辉。

序列化庫(kù)的選擇

當(dāng)寫個(gè)小demo或者做個(gè)小工具呢撞,沒(méi)有大規(guī)模使用場(chǎng)景损姜,那使用哪個(gè)庫(kù)都是一樣的,因?yàn)樾阅艿捏w現(xiàn)并不會(huì)很明顯殊霞。但是如果是在實(shí)際項(xiàng)目中使用摧阅,且伴隨著高并發(fā),大容量等場(chǎng)景脓鹃,我還是推薦使用json-iterator逸尖。

go自帶json庫(kù)

"encoding/json" 官當(dāng)自帶

json-iterator

號(hào)稱最快的go json解析器。跟官方的寫法兼容瘸右,我目前基本都使用這個(gè)娇跟。

https://github.com/json-iterator/go

效率對(duì)比

ns 納秒 op 操作

ns/op allocation bytes allocation times
std decode 35510 ns/op 1960 B/op 99 allocs/op
easyjson decode 8499 ns/op 160 B/op 4 allocs/op
jsoniter decode 5623 ns/op 160 B/op 3 allocs/op
std encode 2213 ns/op 712 B/op 5 allocs/op
easyjson encode 883 ns/op 576 B/op 3 allocs/op
jsoniter encode 837 ns/op 384 B/op 4 allocs/op

編碼案例

type Hero struct {
    Name string
    Age int
    Birthday string
    Sal float64
    Skill string
}

序列化

hero := Hero{
    Name:     "小王",
    Age:      20,
    Birthday: "2021-02-23",
    Sal:      88.02,
    Skill:    "技能",
}
jsonStu, err := json.Marshal
if err != nil {
    fmt.Println("生成json字
}
fmt.Println(string(jsonStu))

反序列化

結(jié)構(gòu)體 struct

str := "{\"Name\":\"張三豐\",\"Age\":98,\"Birthday\":\"2001-09-21\",\"Sal\":3800.85,\"Skill\":\"武當(dāng)劍法\"}"
var hero Hero
err := json.Unmarshal([]byte(str), &hero)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}

結(jié)構(gòu)體數(shù)組

倆種方式,一種直接反序列化成 結(jié)構(gòu)體數(shù)組太颤,另一種反序列化為 slice苞俘,內(nèi)容為map[string]interface{}

結(jié)構(gòu)體數(shù)組

str := `[{"Name":"張三豐","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武當(dāng)劍法"},{"Name":"張無(wú)忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`

var hero []Hero
err := json.Unmarshal([]byte(str), &hero)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 hero=%v", hero)

slice

str := `[{"Name":"張三豐","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武當(dāng)劍法"},{"Name":"張無(wú)忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`

//定義一個(gè)slice
var slice []map[string]interface{}
//注意:反序列化map,不需要make,因?yàn)閙ake操作被封裝到Unmarshal函數(shù)
err := json.Unmarshal([]byte(str), &slice)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 slice=%v\n", slice)

資源列表

http://www.zhouhuibo.club

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末龄章,一起剝皮案震驚了整個(gè)濱河市吃谣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌做裙,老刑警劉巖岗憋,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锚贱,居然都是意外死亡仔戈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拧廊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)监徘,“玉大人,你說(shuō)我怎么就攤上這事吧碾』丝” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵倦春,是天一觀的道長(zhǎng)户敬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)睁本,這世上最難降的妖魔是什么山叮? 我笑而不...
    開(kāi)封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮添履,結(jié)果婚禮上屁倔,老公的妹妹穿的比我還像新娘。我一直安慰自己暮胧,他們只是感情好锐借,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布问麸。 她就那樣靜靜地躺著,像睡著了一般钞翔。 火紅的嫁衣襯著肌膚如雪严卖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天布轿,我揣著相機(jī)與錄音哮笆,去河邊找鬼。 笑死汰扭,一個(gè)胖子當(dāng)著我的面吹牛稠肘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萝毛,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼项阴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了笆包?” 一聲冷哼從身側(cè)響起环揽,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庵佣,沒(méi)想到半個(gè)月后歉胶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巴粪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年通今,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片验毡。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帝嗡,靈堂內(nèi)的尸體忽然破棺而出晶通,到底是詐尸還是另有隱情,我是刑警寧澤哟玷,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布狮辽,位于F島的核電站,受9級(jí)特大地震影響巢寡,放射性物質(zhì)發(fā)生泄漏喉脖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一抑月、第九天 我趴在偏房一處隱蔽的房頂上張望树叽。 院中可真熱鬧,春花似錦谦絮、人聲如沸题诵。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)性锭。三九已至赠潦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間草冈,已是汗流浹背她奥。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怎棱,地道東北人哩俭。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹄殃,于是被迫代替她去往敵國(guó)和親携茂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 官方的json庫(kù), 只支持整體的序列化與反序列化. 像其它語(yǔ)言的庫(kù), json庫(kù)都支持單個(gè)getValue/set...
    最近不在閱讀 15,038評(píng)論 0 5
  • 后端開(kāi)發(fā)人員跟前端對(duì)接接口的時(shí)候诅岩,或多或少都會(huì)面臨一些溝通問(wèn)題讳苦,比如說(shuō)枚舉字符的定義,比如有整形狀態(tài)字段:stat...
    wu_sphinx閱讀 3,340評(píng)論 0 0
  • json pem xml json json包實(shí)現(xiàn)了json對(duì)象的編解碼吩谦,參見(jiàn)RFC 4627[http://to...
    DevilRoshan閱讀 524評(píng)論 0 0
  • 概述 jsoniter(json-iterator)是一款快且靈活的 JSON 解析器鸳谜;從 dsljson和 js...
    神奇的考拉閱讀 27,934評(píng)論 0 4
  • 差不多有一個(gè)多月沒(méi)有更新了,因?yàn)檫@段時(shí)間在做一件事情:學(xué)習(xí)netty,當(dāng)然并沒(méi)有學(xué)完現(xiàn)在相當(dāng)于是一個(gè)學(xué)習(xí)前的一個(gè)前...
    小雞在路上閱讀 289評(píng)論 0 1