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

Как я могу разобраться в массиве JSON со смешанными типами данных в Go?

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

How Can I Unmarshal a JSON Array with Mixed Data Types in Go?

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