有没有办法动态更改结构字段标记?
key := "mykey"
// a struct definition like
MyStruct struct {
field `json:key` //or field `json:$key`
}
// I want the following output
{
"mykey": 5
}
在documentation中找不到任何内容。
答案 0 :(得分:4)
您可以通过实施json.Marshaler
interface来自定义封送类型的方式。这将覆盖内省结构字段的默认行为。
对于这个特定的例子,你可以这样做:
func (s MyStruct) MarshalJSON() ([]byte, error) {
data := map[string]interface{}{
key: s.field,
}
return json.Marshal(data)
}
这里我构建一个map[string]interface{}
值,表示我想要的JSON输出并将其传递给json.Marshal
。
您可以在此处测试此示例:http://play.golang.org/p/oTmuNMz-0e