"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Método de datos de tipo múltiple de matriz

Método de datos de tipo múltiple de matriz

Publicado el 2025-04-17
Navegar:254

How to Unmarshal a Go Array with Disparate Data Types?

unmarshalling una matriz de tipos dispares en Go

al manejar pares de valores clave, la unmarshalling es sencilla. Sin embargo, la desamparación de una variedad de tipos mixtos en un orden distinto presenta un desafío. La resolución de este problema exige una solución que pueda acomodar diferentes tipos de datos de manera flexible.

El lenguaje de programación GO proporciona una opción elegante para manejar este escenario. Al aprovechar el tipo de interfaz {} en conjunto con la afirmación de tipo, podemos analizar dinámicamente el tipo subyacente de cada elemento de matriz y unmarshal en consecuencia.

volvamos a visitar el código problemático y modificarlo para aprovechar esta técnica:

package main

import (
    "encoding/json"
    "fmt"
)

func decodeJSON(f interface{}) {
    switch vf := f.(type) {
    case map[string]interface{}:
        fmt.Println("is a map:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    case []interface{}:
        fmt.Println("is an array:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    }
}

func checkTypeAndDecode(k string, v interface{}) {
    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)
        decodeJSON(v)
    }
}

func main() {
    my_json := `{
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}`

    var f interface{}
    err := json.Unmarshal([]byte(my_json), &f)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("JSON:")
        decodeJSON(f)
    }
}

Este código modificado emplea la función DecodeJson para analizar recursivamente la estructura JSON, identificando el tipo de datos de cada elemento e imprimiendo la representación apropiada. Para estructuras anidadas complejas, se realizan llamadas anidadas a DecodeJson.

La salida generada por este código revisado ilustra cómo cada elemento se identifica e imprime correctamente en función de su tipo de datos:

JSON:
is a map:
an_array: is an array:
0: is string - "with_a string"
1: is a map:
and: is string - "some_more"
different: is an array:
0: is string - "nested"
1: is string - "types"

Con esta comprensión mejorada del manejo de tipos en GO, puede con confianza matrices de soltera que contienen una combinación heterogénea de tipos de datos, asegurando una representación de datos precisa y consistente en sus aplicaciones.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3