JSON 데이터를 처리할 때 JSON 객체 내의 특정 요소를 데이터 구조에 맞는 필드입니다. 그러나 기본 JSON 역마샬링 메커니즘이 항상 이러한 요구 사항을 충족하는 것은 아닙니다. 여기가 사용자 지정 역마샬링이 작동하는 곳입니다.
제공된 예에는 양초 조각을 값으로 예상하는 맵 필드 쌍이 있는 구조체 OHLC_RESS가 있습니다. 그러나 초기 코드는 쌍 맵을 채우지 못합니다.
정렬화 해제 동작은 여러 요인으로 인해 발생합니다.
이러한 문제를 해결하려면 구조체 내에서 관련 메서드를 구현하여 json.Unmarshaler 인터페이스를 활용할 수 있습니다.
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode JSON object keys and values into raw messages. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Handle the "last" field. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Unmarshal 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 요소가 어떻게 표시되는지 제어할 수 있는 유연성을 얻을 수 있습니다. JSON 개체의 구조가 직접적으로 일치하지 않는 경우에도 원하는 데이터 구조에 매핑됩니다.
위 내용은 JSON 키가 구조체 필드 이름과 일치하지 않는 경우 Go에서 구조체를 슬라이스 맵으로 사용자 정의 역마샬링하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!