unmarshalling массив разнородных типов в go
При обращении с ключевыми парами, Unmarshalling является простым. Тем не менее, разветвление массива смешанных типов в отдельном порядке представляет собой проблему. Решение этой проблемы требует решения, которое может приспособить различные типы данных гибким образом. Используя тип интерфейса {} в сочетании с утверждением типа, мы можем динамически проанализировать базовый тип каждого элемента массива и unmarshal соответственно. импорт ( "Кодирование/json" "FMT" ) func decodejson (f interface {}) { Switch vf: = f. (type) { Case Map [String] интерфейс {}: fmt.println ("это карта:") для k, v: = range vf { CheckTypeAndDecode (K, V) } case [] интерфейс {}: fmt.println ("это массив:") для k, v: = range vf { CheckTypeAndDecode (K, V) } } } func checktypeanddecode (k string, v interface {}) { Switch vv: = v. (type) { Строка корпуса: fmt.printf (" %V: is string - %Q \ n", k, vv) случай int: fmt.printf (" %V: IS int - %Q \ n", k, vv) по умолчанию: fmt.printf ("%V:", k) decodejson (v) } } func main () { my_json: = `{ "an_array": [ "с строкой_а", { "и": "some_more", «Разное»: [«Вложенные», «Типы»] } ] } ` var f интерфейс {} err: = json.unmarshal ([] byte (my_json), & f) Если ошибка! = nil { fmt.println (err) } еще { fmt.println ("json:") decodejson (f) } }
В этом модифицированном коде используется функция Decodejson для рекурсивного анализа структуры JSON, идентифицируя тип данных каждого элемента и печать соответствующего представления. Для сложных вложенных структур выполняются вложенные вызовы в Decodejson. карта: an_array: это массив: 0: is String - "with_a String" 1: карта: и: это строка - "some_more" Разное: это массив: 0: это строка - "вложенное" 1: is String - "types"
]. С этим улучшенным пониманием обработки типа вы можете с уверенностью Unmarshal массивы, содержащие гетерогенное сочетание типов данных, обеспечивая точное и последовательное представление данных в ваших приложениях.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3