Обработка динамических типов поля JSON в Go
При Unmarshaling json go go в структуру может столкнуться с несоответствиями в типе значения конкретного ключа по запросам API. Эта задача возникает, когда сервер отправляет разные структуры объектов или ссылки на строки для одного и того же ключа. Это может создать проблему, поскольку GO требует фиксированной структуры для Unmarshaling.
для решения этой проблемы может использоваться тип-динамический подход с использованием типа интерфейса. Рассмотрим следующие данные JSON:
]{ "mykey": [ {obj1}, {obj2} ] }
, чтобы захватить эту динамическую природу, мы можем определить структуру следующим образом:
type Data struct { MyKey []interface{} `json:"mykey"` }
, когда встречается json со строковыми значениями, например:
{ "mykey": [ "/obj1/is/at/this/path", "/obj2/is/at/this/other/path" ] }
элементы среза MyKey будут декодированы как строки. Для объектов они будут декодированы как интерфейс map [string] {} значения. Это различие может быть сделано с помощью типового переключателя:
for i, v := range data.MyKey { switch x := v.(type) { case string: fmt.Println("Got a string: ", x) case map[string]interface{}: fmt.Printf("Got an object: %#v\n", x) } }
, Unmarshaling The JSON в тип интерфейса и используя переключатели типа, разработчики GO могут обрабатывать динамические типы поля и правильно проанализировать данные, независимо от структуры, предоставленной сервером.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3