구조체를 슬라이스 맵으로 사용자 정의 역마샬링
Go에서는 기본 역마샬링 동작이 충분하지 않을 때 사용자 정의 역마샬링을 사용할 수 있습니다. 다음 시나리오를 고려하십시오. 동적 키가 있는 JSON 객체에서 채워야 하는 맵 필드가 있는 구조체.
예제 문제
제공된 코드는 시도를 보여줍니다. JSON 응답을 슬라이스 구조체의 맵이 포함된 구조체로 역마샬링합니다(Pair map[string][]Candles). 그러나 정렬 해제 후에도 맵은 비어 있습니다.
해결책: 더 간단한 구조 선택
간단한 해결책은 맵을 제거하고 구조체를 수정하여 JSON 구조:
<code class="go">type OHLC_RESS struct { Pair []Candles `json:"XXBTZUSD"` Last int64 `json:"last"` }</code>
JSON.Unmarshaler를 사용한 사용자 정의 언마샬링
또는 맵 기반 구조를 유지하려면 json.Unmarshaler 인터페이스의 사용자 정의 구현이 필요합니다. . 이 접근 방식은 역마샬링 프로세스를 완벽하게 제어합니다.
구현 세부 정보:
코드 조각:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode keys only. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Decode "last" element. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Decode remaining elements into Pair map. r.Pair = make(map[string][]Candles, len(obj)) for key, val := range obj { cc := []Candles{} if err := json.Unmarshal(val, &cc); err != nil { return err } r.Pair[key] = cc } return nil }</code>
위 내용은 Go에서 슬라이스 맵이 있는 구조체를 슬라이스 맵으로 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!