Saltar al contenido

Acceso al mapa anidado de tipo mapa[string]interfaz {} en Golang

Solución:

La notación x.(T) se llama una afirmación de tipo.

Por una expresión x de tipo de interfaz y un tipo T, la expresión principal x.(T) afirma que x no es nil y que el valor almacenado en x es de tipo T.

Tu ejemplo:

result["args"].(map[string]interface{})["foo"]

Significa que el valor de tu results mapa asociado con la clave "args" es de tipo map[string]interface{} (otro mapa con string claves y cualquier valor). Y desea acceder al elemento de ese mapa asociado con la clave "foo".

Si conoce el formato JSON de entrada, entonces sí, debe usar un genérico map[string]interface{} escriba para procesarlo. Si conoce la estructura exacta del JSON de entrada, puede crear un struct para que coincida con los campos esperados, y al hacerlo, puede desarmar un texto JSON en un valor de su personalizado struct tipo, por ejemplo:

type Point struct {
    Name string
    X, Y int
}

func main() {
    in := `{"Name":"center","X":2,"Y":3}`

    pt := Point{}
    json.Unmarshal([]byte(in), &pt)

    fmt.Printf("Result: %+v", pt)
}

Producción:

Result: {Name:center X:2 Y:3}

Pruébelo en Go Playground.

Modelando su entrada

Su entrada JSON actual podría modelarse con este tipo:

type Data struct {
    Args struct {
        Foo string
    }
}

Y accediendo Foo (pruébalo en Go Playground):

d := Data{}
json.Unmarshal([]byte(in), &d)
fmt.Println("Foo:", d.Args.Foo)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *