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>
JSON 데이터를 이 특수 구조로 역마샬링하려면 Order 구조체에 json.Unmarshaler 인터페이스를 구현할 수 있습니다.
<code class="go">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>
이 구현에서는 Order 유형이 구조체(객체)에 대한 기본 표현이 아닌 부동 소수점의 2요소 배열에서 디코딩되어야 함을 지정합니다.
사용 예:
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) fmt.Println(m.Asks[0].Price) // Output: 21</code>
json.Unmarshaler를 구현하면 특정 데이터 구조 요구 사항에 맞게 언마샬링 프로세스를 쉽게 사용자 정의할 수 있습니다.
위 내용은 Go에서 특정 구조체로 JSON 역마샬링을 사용자 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!