«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как можно справиться с динамическими типами поля JSON во время Unmarshaling?

Как можно справиться с динамическими типами поля JSON во время Unmarshaling?

Опубликовано в 2025-03-25
Просматривать:265

How Can Go Handle Dynamic JSON Field Types During Unmarshaling?

Обработка динамических типов поля 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