在json字段标记内的Golang变量

时间:2015-07-24 03:27:10

标签: go

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

key := "mykey"

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

// I want the following output
{
     "mykey": 5
}

documentation中找不到任何内容。

1 个答案:

答案 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