はじめに
JSONを返したい場合、定義済みの構造体に対してjson.Marshalとかして、JSONにしていたのですが、下記のBook構造体の例だと、返せるフィールドはTitle,Authorだけになってしまいます。
それ以外のフィールドも動的に追加するにはどうしたらか調べたので書いておこうかと思います。
方法
基本的には、stackoverflowに書いてありますので、参考くださいなんですが、下記のような感じです。
このように、Book構造体に対して、Mashalerインターフェースを実装することで、フィールドを追加することができます。
結果は以下のとおり。
仕組みとしては(簡単に)
この場合、BookはMarshalerインターフェースを実装したことになります。(Marshalerインターフェース)
これによって、Marshalerインターフェースを実装しているなら、marshalerEncoderがコールされ、MarshalJSONがコールされます。
配列の各要素に追加したい場合も同様で、
つまり次のような場合、
Author構造体にMashalerインターフェースを実装してあげればいいだけです。
Playground: http://play.golang.org/p/tZEaLTt7Fc
結果は次のようになります。
以上です。
comments powered by Disqus