json字段标记内的Golang变量

The*_*ist 5 go

有没有办法动态地更改结构字段标记?

key := "mykey"

// a struct definition like
MyStruct struct {
    field `json:key` //or field `json:$key` 
}

// I want the following output
{
     "mykey": 5
}
Run Code Online (Sandbox Code Playgroud)

在文档中找不到任何内容。

Jam*_*dge 5

您可以通过实现json.Marshaler接口来自定义类型的编组方式。这将覆盖对结构字段进行自省的默认行为。

对于此特定示例,您可以执行以下操作:

func (s MyStruct) MarshalJSON() ([]byte, error) {
    data := map[string]interface{}{
        key: s.field,
    }
    return json.Marshal(data)
}
Run Code Online (Sandbox Code Playgroud)

在这里,我正在构造一个map[string]interface{}值,该值代表我想要的JSON输出并将其传递给json.Marshal。

您可以在此处测试此示例:http : //play.golang.org/p/oTmuNMz-0e