以下は、golang チュートリアル コラムからの、golang での Json シリアル化のアプリケーションの詳細な説明です。
Golang の json シリアル化と逆シリアル化の操作は非常に不快なので、高度な言語機能を使用することに慣れています、これらのネイティブの記述方法に切り替えるのは困難です。
BB はあまり多くありません。録音を開始してください。
小規模なデモを作成する場合や、大規模な使用シナリオを持たない小規模なツールを作成する場合は、パフォーマンスが低下するため、どちらのライブラリを使用しても同じです。明らかではないだろう。ただし、実際のプロジェクトで使用され、高い同時実行性、大容量などのシナリオを伴う場合は、やはり json-iterator
を使用することをお勧めします。
"encoding/json" 官当自带
最速の 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))
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) }構造体配列
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 サイトの他の関連記事を参照してください。