ホームページ  >  記事  >  バックエンド開発  >  Go で動的キーを含む JSON を構造体フィールドにアンマーシャリングする方法

Go で動的キーを含む JSON を構造体フィールドにアンマーシャリングする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-16 00:07:03514ブラウズ

How to Unmarshal JSON with Dynamic Keys into Struct Fields in Go?

Go で動的キーを構造体フィールドにアンマーシャリングする

事前に決定された構造に準拠していない JSON データを扱う場合、アンマーシャリングはさらに複雑になります挑戦的。この場合、「things」という名前のオブジェクト内に動的キーを含む JSON 構成ファイルがあります。

これに対処する 1 つの解決策は、構造体内でマップを使用して動的キーをキャプチャすることです。以下に例を示します。

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

キーごとに特定の構造体フィールドを定義する代わりに、「Things」フィールドはキーと値のペアを格納するマップであり、キーは動的キーです。

このアプローチを使用して JSON データをアンマーシャリングするには、次のような操作を行います。

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}

これにより、JSON が「X」構造体にアンマーシャリングされ、動的キーがその中の適切な構造体インスタンスにマップされます。

ただし、キー値をマップ キーの一部ではなく構造体のフィールドとして保持したい場合は、次のアプローチを使用できます。

type Thing struct {
    Name string `json:"-"` // <-- add this field
    Key1 string
    Key2 string
}

...

// Update the name field after unmarshalling
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}

これには、アンマーシャリング中に無視するために「Name」フィールドに「-`json」タグを追加することが含まれます。アンマーシャリング後、ループを使用して、マップ内の各構造体インスタンスの「Name」フィールドに動的キーを割り当てます。

以上がGo で動的キーを含む JSON を構造体フィールドにアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。