golang에서 Json 직렬화 적용에 대한 자세한 설명

藏色散人
풀어 주다: 2021-03-25 17:15:58
앞으로
2610명이 탐색했습니다.

내 소개

golang에서 Json 직렬화 적용에 대한 자세한 설명Golang의 json 직렬화 및 역직렬화 작업은 정말 불편하므로 고급 언어 기능에 익숙하다면 이러한 기본 작성 방법으로 전환하는 것이 불편할 것입니다.

더 이상 BB가 없으면 녹음을 시작하세요.

직렬화 라이브러리 선택

작은 데모를 작성하거나 대규모 사용 시나리오 없이 작은 도구를 만들 때 성능 성능이 명확하지 않기 때문에 어떤 라이브러리를 사용하든 동일합니다. 그러나 실제 프로젝트에서 사용되며 높은 동시성, 대용량 및 기타 시나리오가 수반된다면 여전히 사용하는 것이 좋습니다

.

go에는 자체 json 라이브러리가 함께 제공됩니다.

"encoding/json" 官当自带
로그인 후 복사
json-iterator

json-iterator는 가장 빠른 go json 파서로 알려져 있습니다. 현재는 공식 작성 방식과 호환됩니다.

github.com/json-iterator/go

효율성 비교

ns 나노초 연산 연산

ns/op할당 바이트35510 ns/op1960 B/op160 B/op160 B/op712 B/op576 B/op384 B/op 코딩케이스
type Hero struct {
    Name string
    Age int
    Birthday string
    Sal float64
    Skill string}
로그인 후 복사

할당 시간
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

Serialization
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 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)
}
로그인 후 복사
structure array

두 가지 방법 중 하나는 구조 배열로 직접 역직렬화되고, 다른 하나는 슬라이스로 역직렬화되며, 콘텐츠는 map[string] 인터페이스입니다. {}구조 배열

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿