Go で JSON をオブジェクトの配列にアンマーシャリングする
JSON データをカスタム Go 構造体に解析することは、多くのプログラミング タスクにとって不可欠です。この質問では、Go で JSON を解析してオブジェクトの配列にする方法について説明します。
問題
質問で提供される JSON データは特定の形式を示しており、各キーはは一意の識別子を表し、対応する値は複数の属性を含むネストされたオブジェクトです。目標は、この JSON データを構造体の配列にアンマーシャリングすることです。配列内の各要素は、JSON 内のネストされたオブジェクトの 1 つを表します。
質問で提供されているコード スニペットは、JSON を解析して構造体に変換しようとします。 MonsterCollection 構造体。Monster 構造体への文字列のマップが含まれます。ただし、コンパイラは、型の不一致による無効な操作エラーを報告します。
解決策
コード スニペットの主な問題は、JSON をインターフェイスにアンマーシャリングすることです。 {} タイプ。動的型付けが可能ですが、機能が制限されています。ネストされたオブジェクト内の特定のフィールドにアクセスするには、ループ内の v 変数が正しい型に型アサートされる必要があります。
さらに、コードは整数キーを使用して Monster オブジェクトをマップに挿入しようとします。ただし、プール マップは文字列から Monster 構造体へのマップであるため、キーは文字列である必要があります。
次のコードは、JSON を Monster 構造体の配列に適切にアンマーシャリングする方法を示しています。
type Monster struct { MonsterId int32 `json:"monster-id"` Level int32 `json:"level"` SkillLevel int32 `json:"skill-level"` AimerId int32 `json:"aimer-id"` } type MonsterCollection struct { Pool map[string]Monster } func (mc *MonsterCollection) FromJson(jsonStr string) error { var data map[string]Monster b := []byte(jsonStr) err := json.Unmarshal(b, &data) if err != nil { return err } mc.Pool = data return nil }
このコード内:
これで、JSON データを MonsterCollection 構造体にアンマーシャリングし、プール マップを通じてアクセスできるようになりました。これにより、一意の識別子を使用して個々のモンスターを取得する便利な方法が提供されます。
以上がGo で JSON をオブジェクトの配列にアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。