JSON アンマーシャリングを理解するのは難しい場合があります。この記事では、次のコード スニペットを使用して Go でマップをアンマーシャリングするときに発生した問題について説明します:
<code class="go">import ( "encoding/json" "fmt" ) type OHLC_RESS struct { Pair map[string][]Candles Last int64 `json:"last"` } type Candles struct { // ... } func (c *Candles) UnmarshalJSON(d []byte) error { // ... } func main() { // ... }</code>
コードを実行すると、Last フィールドが正しくアンマーシャリングされているにもかかわらず、ペア マップは空のままです。
オプション 1: 構造体の定義を調整する
提供された JSON の例に対する最も簡単な解決策は、マップを削除し、構造体定義を JSON 構造に合わせることです。
<code class="go">type OHLC_RESS struct { Pair []Candles `json:"XXBTZUSD"` Last int64 `json:"last"` }</code>
オプション 2: カスタム Unmarshaler を実装する
マップ キーが動的でフィールド タグにハードコーディングできない場合は、json.Unmarshaler のカスタム実装インターフェースが必要です。これは、OHLC_RESS 構造体に UnmarshalJSON メソッドを実装することで実現できます。
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // ... }</code>
UnmarshalJSON 実装は、JSON キーと値を個別にデコードし、「最後の」要素を残りとは異なる方法で処理します。残りの要素はペア マップにアンマーシャリングされます。
以上が提供された記事の内容に応じた、質問形式のタイトル オプションをいくつか示します。 **直接的かつ問題重視:** * **キーが動的であるときに Go でスライスのマップをアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。