Golang의 json 직렬화 및 역직렬화 작업은 정말 불편하므로 고급 언어 기능에 익숙하다면 이러한 기본 작성 방법으로 전환하는 것이 불편할 것입니다.
직렬화 라이브러리 선택
작은 데모를 작성하거나 대규모 사용 시나리오 없이 작은 도구를 만들 때 성능 성능이 명확하지 않기 때문에 어떤 라이브러리를 사용하든 동일합니다. 그러나 실제 프로젝트에서 사용되며 높은 동시성, 대용량 및 기타 시나리오가 수반된다면 여전히 사용하는 것이 좋습니다
."encoding/json" 官当自带
json-iteratorns 나노초 연산 연산
|
할당 시간 |
std 디코드 | ||
|---|---|---|---|
| 99 allocs/op | easyjson 디코드 | 8499 ns/op | |
| 4 allocs/op | jsoniter 디코드 | 5623 ns/op | |
| 3 allocs/op | std encode | 2213 ns/op | |
| 5 allocs/op | easyjson encode | 883ns /op | |
| 3 할당/op | jsoniter encode | 837 ns/op | |
| 4 할당/op | 코딩케이스 |
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)
}structure arraystr := `[{"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)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 중국어 웹사이트의 기타 관련 기사를 참조하세요!