Что у меня есть: две структуры для какого-то API
type BaseUser struct {
ID int64 `json:"user_id"`
Name string `json:"user_name"`
Email string `json:"user_email"`
}
и
type UserWithAddress struct {
BaseUser
Postal string `json:"user_postal"`
City string `json:"user_city"`
Street string `json:"user_street"`
}
Что я хочу сделать: конвертирует json ключи из snake_case в camelCase. Допустим, это тело запроса
{
"user_id": 123,
"user_name": "test",
"user_email": "test@mail.com",
"user_postal": "12312",
"user_city": "city",
"user_street": "street"
}
Так что в результате, после какого-то преобразования, я бы хотел получить такой вывод
{
"userId": 123,
"userName": "test",
"userEmail": "test@mail.com",
"userPostal": "12312",
"userCity": "city",
"userStreet": "street"
}
Как сделать Сейчас я справляюсь с этим: Я сделал еще две структуры с тегом camelCase json
type BaseUserCamelCase struct {
ID int64 `json:"userId"`
Name string `json:"userName"`
Email string `json:"userEmail"`
}
и
type UserWithAddressCamelCase struct {
BaseUserCamelCase
Postal string `json:"userPostal"`
City string `json:"userCity"`
Street string `json:"userStreet"`
}
Мое преобразование выглядит как
var userWithAddressCamelCase UserWithAddressCamelCase
userWithAddressCamelCase.BaseUserCamelCase = BaseUserCamelCase(userWithAddress.BaseUser)
//I can't cast whole userWithAddressCamelCase object to another type because of different field names - BaseUser and BaseUserCamelCase
userWithAddressCamelCase.Name = userWithAddress.Name
userWithAddressCamelCase.Email = userWithAddress.Email
userWithAddressCamelCase.Postal = userWithAddress.Postal
//and so on
и мне это не нравится, потому что если BaseUser
или UserWithAddress
вырастет, я должен добавить соответствующее поле к %CamelCase
структурам.
Мой вопрос: Есть ли другой, более эффективный способ обработки ключей?