ホームページ  >  記事  >  バックエンド開発  >  golangでのJsonシリアル化の応用を詳しく解説

golangでのJsonシリアル化の応用を詳しく解説

藏色散人
藏色散人転載
2021-03-25 17:15:442608ブラウズ

以下は、golang チュートリアル コラムからの、golang での Json シリアル化のアプリケーションの詳細な説明です。

golangでのJsonシリアル化の応用を詳しく解説

私について

Golang の json シリアル化と逆シリアル化の操作は非常に不快なので、高度な言語機能を使用することに慣れています、これらのネイティブの記述方法に切り替えるのは困難です。

BB はあまり多くありません。録音を開始してください。

シリアル化ライブラリの選択

小規模なデモを作成する場合や、大規模な使用シナリオを持たない小規模なツールを作成する場合は、パフォーマンスが低下するため、どちらのライブラリを使用しても同じです。明らかではないだろう。ただし、実際のプロジェクトで使用され、高い同時実行性、大容量などのシナリオを伴う場合は、やはり json-iterator を使用することをお勧めします。

go には独自の json ライブラリが付属しています

"encoding/json" 官当自带

json-iterator

最速の go json パーサーとして知られています。公式の書き方と互換性があるので、今は基本的にこれを使っています。

github.com/json-iterator/go

効率比較

ns ナノ秒演算操作


ns/op 割り当てバイト 割り当て時間
std デコード 35510 ns/op 1960 B/op 99 allocs/op
easyjson デコード 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.Marshalif err != nil {
    fmt.Println("生成json字}fmt.Println(string(jsonStu))

Deserialization

構造体 struct
str := "{\"Name\":\"张三丰\",\"Age\":98,\"Birthday\":\"2001-09-21\",\"Sal\":3800.85,\"Skill\":\"武当剑法\"}"
var hero Hero
err := json.Unmarshal([]byte(str), &hero)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
構造体配列

2 つのメソッド。1 つは構造体配列に直接逆シリアル化され、もう 1 つはスライスとコンテンツに逆シリアル化されます。マップ[文字列]インターフェイスです{}

struct array

str := `[{"Name":"张三丰","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武当剑法"},{"Name":"张无忌","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":"武当剑法"},{"Name":"张无忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`

//定义一个slice
var slice []map[string]interface{}
//注意:反序列化map,不需要make,因为make操作被封装到Unmarshal函数
err := json.Unmarshal([]byte(str), &slice)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 slice=%v\n", slice)

以上がgolangでのJsonシリアル化の応用を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。