はじめに
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