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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang程序使用alpine編譯出最小arm鏡像實(shí)現(xiàn)
這篇文章主要為大家介紹了golang程序使用alpine編譯出最小arm鏡像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Golang中omitempty關(guān)鍵字的具體實(shí)現(xiàn)
本文主要介紹了Golang中omitempty關(guān)鍵字的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Golang實(shí)現(xiàn)Directional Channel(定向通道)
這篇文章主要介紹了Golang實(shí)現(xiàn)Directional Channel(定向通道),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
go gin+token(JWT)驗(yàn)證實(shí)現(xiàn)登陸驗(yàn)證
本文主要介紹了go gin+token(JWT)驗(yàn)證實(shí)現(xiàn)登陸驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
Go語言單線程運(yùn)行也會(huì)有的并發(fā)問題解析
這篇文章主要為大家介紹了Go語言單線程運(yùn)行的并發(fā)問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
go實(shí)現(xiàn)圖片拼接與文字書寫的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于go實(shí)現(xiàn)圖片拼接與文字書寫的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01

