Golang中json和jsoniter的區(qū)別使用示例
區(qū)別1: jsoniter除了支持字節(jié)數(shù)組與結(jié)構(gòu)體互轉(zhuǎn)外,還支持字符串與結(jié)構(gòu)體互轉(zhuǎn)
jsoniter使用示例:
package main import ( "fmt" "time" jsoniter "github.com/json-iterator/go" "github.com/json-iterator/go/extra" ) type Order struct { Id int64 `json:"id"` OrderId string `json:"order_id"` Money float64 `json:"money"` CreateTime time.Time `json:"create_time"` Extend map[string]string `json:"extend"` } func main() { order := Order{ Id: 666, OrderId: "12345678", Money: 99.99, CreateTime: time.Now(), Extend: map[string]string{"name": "張三"}, } // 使用1:直接轉(zhuǎn)成字符串 jsonStr, _ := jsoniter.MarshalToString(order) fmt.Println("jsonStr:", jsonStr) // 使用2:直接轉(zhuǎn)成字節(jié)數(shù)組 jsonByteArr, _ := jsoniter.Marshal(order) fmt.Println("jsonByteArr:", jsonByteArr) // 使用3:反序列化之字符串轉(zhuǎn)結(jié)構(gòu)體 str := `{"id":666, "order_id":"12345678", "money": 99.99, "create_time":"2023-12-05T16:19:33.943989108+08:00", "extend":{"name":"張三"}}` var order2 Order err := jsoniter.UnmarshalFromString(str, &order2) if err != nil { fmt.Println("err2:", err) } fmt.Println("order2:", order2) // 使用4:反序列化之字節(jié)數(shù)組轉(zhuǎn)結(jié)構(gòu)體 var order3 Order var jsonNew = jsoniter.ConfigCompatibleWithStandardLibrary // 自適應(yīng)類型 extra.RegisterFuzzyDecoders() err = jsonNew.Unmarshal([]byte(str), &order3) if err != nil { fmt.Println("err3:", err) } fmt.Println("order3:", order3) }
輸出結(jié)果:
jsonStr: {"id":666,"order_id":"12345678","money":99.99,"create_time":"2023-12-05T16:20:40.595914198+08:00","extend":{"name":"張三"}}
jsonByteArr: [123 34 105 100 34 58 54 54 54 44 34 111 114 100 101 114 95 105 100 34 58 34 49 50 51 52 53 54 55 56 34 44 34 109 111 110 101 121 34 58 57 57 46 57 57 44 34 99 114 101 97 116 101 95 116 105 109 101 34 58 34 50 48 50 51 45 49 50 45 48 53 84 49 54 58 50 48 58 52 48 46 53 57 53 57 49 52 49 57 56 43 48 56 58 48 48 34 44 34 101 120 116 101 110 100 34 58 123 34 110 97 109 101 34 58 34 229 188 160 228 184 137 34 125 125]
order2: {666 12345678 99.99 2023-12-05 16:19:33.943989108 +0800 CST map[name:張三]}
order3: {666 12345678 99.99 2023-12-05 16:19:33.943989108 +0800 CST map[name:張三]}
區(qū)別2: jsoniter能夠處理類型不匹配情況
package main import ( "encoding/json" "fmt" "time" jsoniter "github.com/json-iterator/go" "github.com/json-iterator/go/extra" ) type Order struct { Id int64 `json:"id"` OrderId string `json:"order_id"` Money float64 `json:"money"` CreateTime time.Time `json:"create_time"` Extend map[string]string `json:"extend"` } func main() { str := `{"id":666, "order_id":"12345678", "money": "99.99", "create_time":"2023-12-05T16:19:33.943989108+08:00", "extend":{"name":"張三"}}` var order Order err := json.Unmarshal([]byte(str), &order) if err != nil { fmt.Println("json的err:", err) } fmt.Println("json的解析結(jié)果order:", order) var order2 Order var jsonNew = jsoniter.ConfigCompatibleWithStandardLibrary // 自適應(yīng)類型 extra.RegisterFuzzyDecoders() err = jsonNew.Unmarshal([]byte(str), &order2) if err != nil { fmt.Println("jsoniter的err2:", err) } fmt.Println("jsoniter的解析結(jié)果order2:", order2) }
輸出結(jié)果:
json的err: json: cannot unmarshal string into Go struct field Order.money of type float64
json的解析結(jié)果order: {666 12345678 0 2023-12-05 16:19:33.943989108 +0800 CST map[name:張三]}
jsoniter的解析結(jié)果order2: {666 12345678 99.99 2023-12-05 16:19:33.943989108 +0800 CST map[name:張三]}
到此這篇關(guān)于Golang中json和jsoniter的區(qū)別的文章就介紹到這了,更多相關(guān)Golang json和jsoniter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言基礎(chǔ)結(jié)構(gòu)體用法及示例詳解
這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)結(jié)構(gòu)體的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11Golang?HTTP服務(wù)超時(shí)控制實(shí)現(xiàn)原理分析
這篇文章主要介紹了Golang?HTTP服務(wù)超時(shí)控制實(shí)現(xiàn)原理,HTTP服務(wù)的超時(shí)控制是保障服務(wù)高可用性的重要措施之一,由于HTTP服務(wù)可能會(huì)遇到網(wǎng)絡(luò)延遲,資源瓶頸等問(wèn)題,因此需要對(duì)請(qǐng)求進(jìn)行超時(shí)控制,以避免服務(wù)雪崩等問(wèn)題,需要的朋友可以參考下2023-05-05go gin+token(JWT)驗(yàn)證實(shí)現(xiàn)登陸驗(yàn)證
本文主要介紹了go gin+token(JWT)驗(yàn)證實(shí)現(xiàn)登陸驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Golang實(shí)現(xiàn)超時(shí)機(jī)制讀取文件的方法示例
讀寫(xiě)文件是Go程序的基本任務(wù),包括使用程序查看文件內(nèi)容、創(chuàng)建或修改文件,Go提供了os,ioutil,io以及bufio包實(shí)現(xiàn)文件操作,本文介紹如果在讀文件過(guò)程中增加超時(shí)機(jī)制,避免文件太大一直占用資源,需要的朋友可以參考下2025-01-01Go語(yǔ)言利用Unmarshal解析json字符串的實(shí)現(xiàn)
本文主要介紹了Go語(yǔ)言利用Unmarshal解析json字符串的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Go語(yǔ)言調(diào)用其它程序并獲得程序輸出的方法
這篇文章主要介紹了Go語(yǔ)言調(diào)用其它程序并獲得程序輸出的方法,實(shí)例分析了Go調(diào)用cmd程序的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02Golang關(guān)鍵字select的常用用法總結(jié)
這篇文章主要為大家詳細(xì)介紹了golang中select關(guān)鍵字的常用用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10