>백엔드 개발 >Golang >Go에서 혼합 유형 JSON 배열을 직렬화 및 역직렬화하는 방법은 무엇입니까?

Go에서 혼합 유형 JSON 배열을 직렬화 및 역직렬화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-10 13:38:10875검색

How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?

Go에서 혼합 유형 JSON 배열 직렬화

Go에서 문자열, 부동 소수점 및 유니코드 문자를 포함하는 혼합 유형 JSON 배열 직렬화 , 도전을 제기할 수 있습니다. Python은 혼합 유형의 배열을 허용하지만 Go에는 이 기능이 없습니다.

MarshalJSON을 사용한 직렬화

직렬화를 사용자 정의하기 위해 Go는 json.Marshaler 인터페이스를 제공합니다. 이 인터페이스를 구현하면 구조체 Row를 인코딩하는 방법을 지정할 수 있습니다. 이 경우, 우리는 이를 이질적인 값의 배열로 인코딩하려고 합니다.

type Row struct {
    Ooid  string
    Score float64
    Text  string
}

func (r *Row) MarshalJSON() ([]byte, error) {
    arr := []interface{}{r.Ooid, r.Score, r.Text}
    return json.Marshal(arr)
}

MarshalJSON은 인터페이스의 중간 조각을 사용하여{} 혼합된 값을 인코딩하고 인코딩된 JSON 바이트를 반환합니다.

UnmarshalJSON을 사용한 역직렬화

JSON에서 역직렬화하려면 바이트를 다시 구조체로 되돌리면 Go는 json.Unmarshaler 인터페이스를 제공합니다.

func (r *Row) UnmarshalJSON(bs []byte) error {
    arr := []interface{}{}
    json.Unmarshal(bs, &arr)
    // TODO: add error handling here.
    r.Ooid = arr[0].(string)
    r.Score = arr[1].(float64)
    r.Text = arr[2].(string)
    return nil
}

UnmarshalJSON은 유사한 중간 인터페이스 슬라이스를 사용하여{} JSON 값을 디코딩하고 Row 구조체를 채웁니다.

By 이러한 인터페이스를 구현하면 직렬화 및 역직렬화 프로세스를 제어할 수 있어 Go에서 혼합 유형 배열로 작업할 수 있습니다.

위 내용은 Go에서 혼합 유형 JSON 배열을 직렬화 및 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.