JSON データを扱うとき、JSON オブジェクト内の特定の要素をデータ構造に合わせたフィールド。ただし、デフォルトの JSON アンマーシャリング メカニズムが常にこれらの要件を満たしているとは限りません。ここでカスタム アンマーシャリングが登場します。
この例では、Candle のスライスを値として期待するマップ フィールド ペアを持つ構造体 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 中国語 Web サイトの他の関連記事を参照してください。