当并非所有 Struct 值都可以转换为 interface{} 时重命名 JSON 标签

假设我有以下内容struct,并且我想根据代码中的一些字符串变量重命名 X 和 Y。

type RenameStruct struct {
    X map[string]interface{}
    Y []map[string]interface{}
}

在编码为 JSON 时重命名它们的最佳方法是什么?我在 StackOverflow 中找到的那些似乎不适用于struct一个字段是一个interface{}ant 而另一个是[]interface{}.

编辑:我使用 Dave 的回答以这种方式创建“RenameStruct”列表:play.golang.org/p/hKZQvhJV2iL


慕田峪4524236
浏览 172回答 1
1回答

临摹微笑

您需要使用自定义 JSON 编组器,然后通过某种方式传入您想要的名称。我能想到的唯一简单方法是:type RenameStruct struct {    X map[string]interface{}    Y []map[string]interface{}    xName string    yName string}func (r RenameStruct) MarshalJSON() ([]byte, error) {    data := make(map[string]interface{})    data[r.xName] = r.X    data[r.yName] = r.Y    return json.Marshal(data)}https://play.golang.org/p/cpjgJ5tpcK3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go