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 サイトの他の関連記事を参照してください。