「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go でネストされた JSON をオブジェクトの配列にアンマーシャリングする方法

Go でネストされた JSON をオブジェクトの配列にアンマーシャリングする方法

2024 年 12 月 21 日に公開
ブラウズ:611

How to Unmarshal Nested JSON into an Array of Objects in Go?

Go でネストされた 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 を Monster オブジェクトの配列にアンマーシャリングすることです。

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}

ソリューション

これを実現するには、次の手順に従います:

  1. MonsterCollection の定義: Monster のマップを保持する MonsterCollection タイプを作成します。文字列キーを持つオブジェクト。
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. FromJson メソッドの実装: アンマーシャリングを処理するために MonsterCollection 型で FromJson メソッドを定義します。
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
  • var data *map[string]Monster を使用すると、インターフェイス{}の使用が回避され、結果のマップが目的のタイプになることが保証されます。
  • データをポインタとして渡すことで、次のことが保証されます。アンマーシャリング中に行われた変更は、MonsterCollection の Pool フィールドに反映されます。
  1. 修正プールのキー タイプ: プール マップのキー タイプを文字列に変更して、JSON データのキーと一致させます。
  2. 構造体タグを使用: JSON 構造体タグをモンスターに追加します。 JSON データのフィールド名を指定する struct。
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
  1. Call FromJson: JSON 文字列を使用して FromJson メソッドを呼び出し、データを MonsterCollection にアンマーシャリングします。
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. エラーの確認: デバッグ目的で FromJson によって返されたエラーを処理します。
  2. オブジェクトへのアクセス: MonsterCollection の Pool フィールドを使用して、個々のモンスターにアクセスしますobject.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}

これらの手順に従うと、ネストされた JSON データを Go の Monster オブジェクトの配列にアンマーシャリングできます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3