Go에서 언마샬링에는 JSON 데이터를 Go 데이터 구조로 변환하는 작업이 포함됩니다. 역마샬링의 기본 원칙은 간단하지만 지도 채우기와 같은 특정 시나리오에는 사용자 정의 처리가 필요할 수 있습니다.
일반적으로 직면하는 문제는 Go 구조체에 매핑합니다. 다음 예를 고려하십시오.
<code class="go">type OHLC_RESS struct { Pair map[string][]Candles Last int64 `json:"last"` } // Candles represents individual candlesticks within the map. type Candles struct { // ... Time, Open, High, Low, Close, VWAP, Volume, Count fields omitted }</code>
위 구조체를 사용하여 JSON 데이터를 비정렬화하려고 시도하면 마지막 필드가 성공적으로 채워지지만 쌍 맵은 비어 있습니다.
Go의 기본 역마샬링 프로세스는 필드 이름과 태그를 사용하여 JSON 키를 일치시킵니다. 그러나 이 경우 쌍 맵은 키 이름을 미리 알 수 없으므로 사용자 정의 처리가 필요합니다. 이를 달성하려면 OHLC_RESS 구조체에 대한 json.Unmarshaler 인터페이스를 구현하십시오.
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode only the object's keys and leave values as raw JSON. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Decode the "last" element into the Last field. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Decode the remaining elements into the 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>
이 사용자 정의 역마샬링 기능은 디코딩 프로세스를 여러 단계로 분리합니다. 먼저 객체의 키를 디코딩한 다음 "마지막" 요소를 별도로 처리하고 마지막으로 나머지 요소를 쌍 맵으로 디코딩합니다. 이 접근 방식을 사용하면 디코딩 프로세스에 대한 제어권을 부여하고 쌍 맵과 같은 특정 필드를 사용자 정의 처리할 수 있습니다.
위 내용은 사용자 정의 처리를 사용하여 JSON 맵을 Go 구조체로 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!