構造体にフィールドを追加しないで、JSONに動的にフィールドを追加したい #golang

Posted by kwmt on Tue, Sep 23, 2014

はじめに

JSONを返したい場合、定義済みの構造体に対してjson.Marshalとかして、JSONにしていたのですが、下記のBook構造体の例だと、返せるフィールドはTitle,Authorだけになってしまいます。

それ以外のフィールドも動的に追加するにはどうしたらか調べたので書いておこうかと思います。

方法

基本的には、stackoverflowに書いてありますので、参考くださいなんですが、下記のような感じです。

このように、Book構造体に対して、Mashalerインターフェースを実装することで、フィールドを追加することができます。

結果は以下のとおり。

仕組みとしては(簡単に)

この場合、BookMarshalerインターフェースを実装したことになります。(Marshalerインターフェース)

これによって、Marshalerインターフェースを実装しているなら、marshalerEncoderがコールされ、MarshalJSONがコールされます。

配列の各要素に追加したい場合も同様で、

つまり次のような場合、

Author構造体にMashalerインターフェースを実装してあげればいいだけです。

Playground: http://play.golang.org/p/tZEaLTt7Fc

結果は次のようになります。

以上です。



comments powered by Disqus