Переименуйте тег JSON, когда не все значения Struct могут быть преобразованы в интерфейс {} - PullRequest
0 голосов
/ 01 марта 2019

Скажем, у меня есть следующие struct, и я хочу переименовать X и Y в соответствии с некоторыми строковыми переменными в моем коде.

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

Как лучше всего переименовать их при кодировании в JSON?Те, что я нашел здесь в StackOverflow, кажется, неприменимы к struct, где одно поле является interface{}, а другое - []interface{}.

Редактировать: я использовал ответ Дейва, чтобы создать список"RenameStruct" следующим образом: play.golang.org / p / hKZQvhJV2iL

1 Ответ

0 голосов
/ 01 марта 2019

Вам нужно будет использовать собственный маршаллер 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...