Go で JSON をオブジェクトの配列にアンマーシャリングする
JSON オブジェクトをカスタム構造体の配列に解析しようとすると、問題が発生します。ただし、指定した JSON は、最上位オブジェクトのキーと値のペアの間にカンマがないため、無効であるようです。修正され、フォーマットされた JSON は次のとおりです。
{ "1001":{ "level":10, "monster-id":1001, "skill-level":1, "aimer-id":301 }, "1002":{ "level":12, "monster-id":1002, "skill-level":1, "aimer-id":302 }, "1003":{ "level":16, "monster-id":1003, "skill-level":2, "aimer-id":303 } }
JSON アンマーシャリングの結果として得られたマップをインターフェースに割り当てたため、JSON を解析しようとした最初の試行でエラーが発生しました。{}価値。このマップにインデックスを付けるときは、マップからキーを取得するたびに、v.(map[string]interface{}) を使用して値を再度アサートする必要があります。
さらに、int を挿入しようとしました。文字列をキーとして持つマップのキーとして使用すると、さらにエラーが発生します。
アンマーシャリング プロセスを簡素化し、手動による型アサーションを回避するには、ターゲット データ型を直接アンマーシャリングする手法を使用できます。更新された例は次のとおりです:
package main import ( "encoding/json" ) 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 = &mc.Pool b := []byte(jsonStr) return json.Unmarshal(b, data) } func main() { jsonString := `{ "1001":{ "level":10, "monster-id":1001, "skill-level":1, "aimer-id":301 }, "1002":{ "level":12, "monster-id":1002, "skill-level":1, "aimer-id":302 }, "1003":{ "level":16, "monster-id":1003, "skill-level":2, "aimer-id":303 } }` mc := MonsterCollection{} if err := mc.FromJson(jsonString); err != nil { // Handle error } for _, monster := range mc.Pool { // Access monster data here } }
以上がJSON を Go 構造体の配列に効率的にアンマーシャリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。