一部のインターフェイスの配列を含むオブジェクトをデシリアライズしたいEntity
:
type Result struct {
Foo int;
Bar []Entity;
};
Entity
いくつかの構造体型によって実装されるインターフェイスです。JSON データは、各エンティティの「type」フィールドで構造体の型を識別します。例えば
{"type":"t1","field1":1}
{"type":"t2","field2":2,"field3":3}
Result
配列に正しくデータが入力されるように型を逆シリアル化するにはどうすればよいでしょうか。私が見ることができるものから、私はしなければなりません:
- に実装
UnmarshalJSON
しResult
ます。 - として解析
Bar
し[]*json.RawMessage
ます。 - 各生メッセージを として解析します
map[string]interface{}
。 - 生メッセージの「タイプ」フィールドを確認してください。
- 適切なタイプの構造体を作成します。
- 生のメッセージを再度解析します。今回は、作成したばかりの構造体に変換します。
これはすべて非常に退屈で退屈に聞こえます。これを行うより良い方法はありますか?それとも、私はそれを逆に行っていますか?異種オブジェクトの配列を処理するためのより標準的な方法はありますか?