Json序列化在golang中的應用

2021-10-21 14:06:33 字數 1849 閱讀 2011

部落格:

通過學習和分享的過程,將自己工作中的問題和技術總結輸出,希望菜鳥和老鳥都能通過自己的文章收穫新的知識,並付諸實施。

golang對json序列化和反序列化的操作實在是難受,所以說用習慣了高階語言特性,再轉到這些偏原生的寫法上就會很難受。

不多bb,開始記錄。

當寫個小demo或者做個小工具,沒有大規模使用場景,那使用哪個庫都是一樣的,因為效能的體現並不會很明顯。但是如果是在實際專案中使用,且伴隨著高併發,大容量等場景,我還是推薦使用json-iterator

"encoding/json" 官當自帶
號稱最快的go json解析器。跟官方的寫法相容,我目前基本都使用這個。

效率對比

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
hero := hero

jsonstu, err := json.marshal

if err != nil

fmt.println(string(jsonstu))

str := ""

var hero hero

err := json.unmarshal(byte(str), &hero)

if err != nil

倆種方式,一種直接反序列化成 結構體陣列,另一種反序列化為 slice,內容為map[string]inte***ce{}

結構體陣列

str := `[,]`

var hero hero

err := json.unmarshal(byte(str), &hero)

if err != nil

fmt.printf("反序列化後 hero=%v", hero)

slice

str := `[,]`

//定義乙個slice

var slice map[string]inte***ce{}

//注意:反序列化map,不需要make,因為make操作被封裝到unmarshal函式

err := json.unmarshal(byte(str), &slice)

if err != nil

fmt.printf("反序列化後 slice=%v\n", slice)

golang的json序列化問題

首先看一段 package main import encoding json fmt type result struct func main r result err json.unmarshal byte s r if err nil fmt.println r fmt.println r.s...

json序列化 反序列化

json序列化 json的dumps方法可以將json格式資料序列為python的相關資料型別,比如str,常用於列印,另外,在序列化時,中文漢字被轉換為unicode編碼,在dumps函式中新增引數ensure ascii false可解決 dumps的indent參考可以調整顯示格式,即縮排,一...

C 中JSON序列化和反序列化

最近在寫些呼叫他人介面的程式,用到了大量的json xml序列化和反序列化,今天就來總結下json的序列化和反序列化的實現,有寫得不好的望園中博友多多指教。json序列化和反序列化幫助類 using system using system.collections.generic using syst...