unmarshalling массив разнообразных типов
в обработке JSON, UnmarShalling массивы с различными типами элементов могут быть оспаривающими. В этой статье рассматривается вопрос о том, как массивы Unmarshalling, состоящие из элементов с известными, но несортированными типами данных.
Go для произвольного декодирования данных
, как указано в официальной документации Go на json incoding, можно Decode Artishrary Data In Interfface {{{{athrary. Используя утверждение типа, тип данных может быть динамически определен. импорт ( "Кодирование/json" "FMT" ) var my_json string = `{ "an_array": [ "с строкой_а", { "и": "some_more", «Разное»: [«Вложенные», «Типы»] } ] } ` func ementatatypes (f interface {}) { Switch vf: = f. (type) { Case Map [String] интерфейс {}: fmt.println ("это карта:") для k, v: = range vf { 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) Идентифицироватьдататипы (v) } } case [] интерфейс {}: fmt.println ("это массив:") для k, v: = range vf { 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) Идентифицироватьдататипы (v) } } } } func main () { fmt.println ("json: \ n", my_json, "\ n") var f интерфейс {} err: = json.unmarshal ([] byte (my_json), & f) Если ошибка! = nil { fmt.println (err) } еще { fmt.printf ("json:") Идентифицироватьдататипы (F) } }
output
код создает следующий вывод:
package main import ( "encoding/json" "fmt" ) var my_json string = `{ "an_array":[ "with_a string", { "and":"some_more", "different":["nested", "types"] } ] }` func IdentifyDataTypes(f interface{}) { switch vf := f.(type) { case map[string]interface{}: fmt.Println("is a map:") for k, v := range vf { switch vv := v.(type) { case string: fmt.Printf("%v: is string - %q\n", k, vv) case int: fmt.Printf("%v: is int - %q\n", k, vv) default: fmt.Printf("%v: ", k) IdentifyDataTypes(v) } } case []interface{}: fmt.Println("is an array:") for k, v := range vf { switch vv := v.(type) { case string: fmt.Printf("%v: is string - %q\n", k, vv) case int: fmt.Printf("%v: is int - %q\n", k, vv) default: fmt.Printf("%v: ", k) IdentifyDataTypes(v) } } } } func main() { fmt.Println("JSON:\n", my_json, "\n") var f interface{} err := json.Unmarshal([]byte(my_json), &f) if err != nil { fmt.Println(err) } else { fmt.Printf("JSON: ") IdentifyDataTypes(f) } }]
] Этот подход допускает динамическую идентификацию и обработку типов элементов в массиве, обеспечивая универсальное решение для ваших Unmarshalling потребностей.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3