>  기사  >  백엔드 개발  >  Go에서 특수 하위 구조를 사용하여 JSON 데이터를 사용자 정의 구조체로 역마샬링하는 방법은 무엇입니까?

Go에서 특수 하위 구조를 사용하여 JSON 데이터를 사용자 정의 구조체로 역마샬링하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-06 14:27:02882검색

How to Unmarshal JSON Data into a Custom Struct with Specialized Substructures in Go?

JSON 데이터를 사용자 정의 구조체로 역마샬링

Go에서는 JSON 데이터를 구조체로 역마샬링하는 것이 일반적인 작업입니다. 다음 JSON 데이터를 고려해보세요.

<code class="json">{
    "Asks": [[21, 1], [22, 1]],
    "Bids": [[20, 1], [19, 1]]
}</code>

이 데이터를 나타내는 구조체를 정의할 수 있습니다.

<code class="go">type Message struct {
    Asks [][]float64 `json:"Asks"`
    Bids [][]float64 `json:"Bids"`
}</code>

그러나 각 순서를 나타내는 데이터 구조를 더욱 특수화하려면 어떻게 해야 할까요? 개별 구조체로:

<code class="go">type Message struct {
    Asks []Order `json:"Asks"`
    Bids []Order `json:"Bids"`
}

type Order struct {
    Price float64
    Volume float64
}</code>

MarshalJSON을 사용한 사용자 지정 언마샬링

이를 달성하려면 Order 구조체에 json.Unmarshaler 인터페이스를 구현할 수 있습니다.

<code class="go">type Order struct {
    Price float64
    Volume float64
}

func (o *Order) UnmarshalJSON(data []byte) error {
    var v [2]float64
    if err := json.Unmarshal(data, &v); err != nil {
        return err
    }
    o.Price = v[0]
    o.Volume = v[1]
    return nil
}</code>

이 메서드는 Go에 JSON의 각 요소를 2개 요소 배열로 디코딩하고 해당 값을 Order 구조체의 Price 및 Volume 필드에 할당하도록 지시합니다.

이 메서드를 구현한 후 이제 JSON 데이터를 비정렬화할 수 있습니다. 사용자 정의 구조체에:

<code class="go">jsonBlob := []byte(`{"Asks": [[21, 1], [22, 1]], "Bids": [[20, 1], [19, 1]]}`)
message := &Message{}
if err := json.Unmarshal(jsonBlob, message); err != nil {
    panic(err)
}</code>

이제 사용자 정의 Order 구조체를 사용하여 데이터에 액세스할 수 있습니다:

<code class="go">fmt.Println(message.Asks[0].Price)</code>

위 내용은 Go에서 특수 하위 구조를 사용하여 JSON 데이터를 사용자 정의 구조체로 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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