Демаршалинг массивов JSON со смешанными типами данных
Задача демаршаллинга массивов JSON, содержащих значения разных типов данных, часто может представлять собой сложную задачу. Например, рассмотрим следующий массив JSON:
{["NewYork",123]}
Проблема:
Во-первых, важно отметить что предоставленный JSON синтаксически неверен. Объектам JSON требуются ключи для каждого значения, поэтому правильным представлением будет либо {"key":["NewYork",123]}, либо просто ["NewYork",123].
Кроме того, при работе с JSON Если массивы состоят из нескольких типов данных, проблема возникает, когда для массивов Go требуется указанный тип. Это может заставить вас задуматься, как действовать в таких ситуациях.
Решение:
Ключом к решению этой проблемы является использование интерфейса типа{}. Это позволяет обрабатывать значения различных типов без необходимости явного преобразования типов. Вот пример кода, демонстрирующий, как это работает:
import ( "encoding/json" "fmt" ) const j = `{"NYC": ["NewYork",123]}` type UntypedJson map[string][]interface{} func main() { ut := UntypedJson{} fmt.Println(json.Unmarshal([]byte(j), &ut)) fmt.Printf("%#v", ut) }
В этом примере мы используем UntypedJson в качестве пользовательского типа, который сопоставляет строки с фрагментами интерфейса{}. Используя тип интерфейса {}, мы можем легко обрабатывать смешанные типы данных в массиве JSON.
Выходные данные программы будут такими:
<nil> map[string][]interface{}{"NYC": \["NewYork" 123]}
Вывод:
Используя тип интерфейса{}, этот подход позволяет эффективно демаршалировать массивы JSON с различными типами данных.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3