ホームページ > バックエンド開発 > Golang > Go で JSON をオブジェクトの配列にアンマーシャリングする方法

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

Mary-Kate Olsen
リリース: 2024-11-27 08:19:09
オリジナル
185 人が閲覧しました

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

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
}
ログイン後にコピー

このコード内:

  • Monster 構造体は、json タグを使用してフィールド名を
  • MonsterCollection 構造体には、一意の識別子をキーとして使用する、Monster 構造体への文字列のマップが含まれています。
  • MonsterCollection の FromJson メソッドは、JSON 文字列を引数として受け取り、アンマーシャリングします。データ マップにマップを割り当て、プール フィールドに割り当て、エラーを返します。

これで、JSON データを MonsterCollection 構造体にアンマーシャリングし、プール マップを通じてアクセスできるようになりました。これにより、一意の識別子を使用して個々のモンスターを取得する便利な方法が提供されます。

以上がGo で JSON をオブジェクトの配列にアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート