Я пытаюсь проанализировать ответ API, где ответ может быть двух разных типов.
В схеме JSON API этот ответ определяется следующим образом ():
"account_user_settings": {
"type": "object",
"allOf": [
{
"$ref": "objects.json#/definitions/users_user_min"
},
{
"$ref": "objects.json#/definitions/users_user_settings_xtr"
}
]
}
ИтакЯ определил несколько типов:
type AccountUserSettings struct {
UsersUserMin
UsersUserSettingsXtr
}
type UsersUserMin struct {
FirstName string `json:"first_name"`
Id int `json:"id"`
LastName string `json:"last_name"`
}
type UsersUserSettingsXtr struct {
Bdate string `json:"bdate"`
City string `json:"city"`
Country string `json:"country"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Phone string `json:"phone"`
}
Ответ содержит JSON, похожий на этот (были изменены только значения):
Первый возможный вариант (полный):
{
"first_name": "John",
"last_name": "Doe",
"bdate": "9.3.1950",
"city": "New York",
"country": "USA",
"phone": "+1 234 567 8910",
}
Второйопция (частичная):
{
"first_name": "John",
"last_name": "Doe",
"id": 123
}
Проблема в том, что в этой конфигурации я всегда пропускаю значения для полей FirstName
и LastName
после демаршалинга.
Если я исключаю из встроенноготипы из консолидирующего типа (AccountUserSettings
), тогда он работает нормально и все поля заполнены правильно.
У меня есть только один вариант, как решить эту проблему, и не думаю, что это достаточно хорошо - не надоиспользовать встраивание и подключить все поля непосредственно в AccountUserSettings
.
Может быть, есть какие-либо другие варианты, которые вы знаете для подобных случаев?