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

Go에서 이기종 JSON 배열을 직렬화 및 역직렬화하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-11 14:57:10463검색

How to Serialize and Deserialize Heterogeneous JSON Arrays in Go?

Go에서 이종 JSON 배열 직렬화

Go에서 이종 JSON 배열 직렬화(문자열, 숫자 및 유니코드 문자 혼합 포함) 혼합 유형 슬라이스에 대한 언어 금지로 인해 문제가 발생합니다. 다음과 같은 원하는 JSON 구조를 고려하세요.

{
    results: [
        ["ooid1", 2.0, "Söme text"],
        ["ooid2", 1.3, "Åther text"],
    ]
}

Marshaler 인터페이스를 사용한 직렬화

직렬화를 사용자 정의하기 위해 Row 유형에 대한 json.Marshaler 인터페이스를 구현할 수 있습니다. 인터페이스의 중간 조각을 사용하여{} 이질적인 값을 인코딩합니다.

package main

import (
    "encoding/json"
    "fmt"
)

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 메서드는 Row를 혼합 유형의 배열로 변환합니다.

언마샬러 인터페이스를 사용한 역직렬화

유사하게 다음을 구현할 수 있습니다. 이기종 값을 분해하는 json.Unmarshaler 인터페이스:

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

이 메서드는 JSON 바이트를 다시 행 구조로 변환합니다.

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

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