Go에서 JSON 데이터를 복잡한 구조체로 역마샬링하려면 특별한 처리가 필요할 수 있습니다. 이 문서에서는 원하는 출력 형식이 구조체의 기본 표현과 다른 시나리오를 살펴봅니다.
다음 JSON 데이터를 고려하세요.
<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>
다음을 사용합니다. struct:
<code class="go">type Message struct { Asks [][]float64 `json:"Bids"` Bids [][]float64 `json:"Asks"` }</code>
다음과 같이 데이터를 역마샬링할 수 있습니다.
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) if err != nil { // Handle error }</code>
그러나 우리는 역마샬링된 데이터를 다음 형식으로 사용하는 것을 선호합니다.
<code class="go">type Message struct { Asks []Order `json:"Bids"` Bids []Order `json:"Asks"` } type Order struct { Price float64 Volume float64 }</code>
이를 달성하기 위해 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>
이것은 JSON 디코더에 Order를 2요소 배열로 처리하도록 지시합니다. 객체가 아닌 부동 소수점입니다.
이제 JSON 데이터를 역마샬링하고 원하는 대로 값에 액세스할 수 있습니다.
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) if err != nil { // Handle error } fmt.Println(m.Asks[0].Price)</code>
위 내용은 Go에서 복잡한 JSON 데이터를 중첩 구조로 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!