Firestore devuelve map[string]interface{} mientras obtiene datos. Cómo representar valores de "detalles"

user:{
      fname:"john",
      lname:"con",
      detail:{
             address:"Delhi, India",
             mob:"0000000009"
             }
}
sn := snap.Data()
    var bt []byte

    for _, val := range sn {
        for _, v := range val {
            log.Println("value ", v)
        }
    }
0
Ravinder Joshi 5 dic. 2019 a las 08:22

2 respuestas

La mejor respuesta

Use json.Unmarshal para convertir su json en un mapa.

    jsonString := `{"user":true,"lname":"con","detail":{"address":"Delhi, India","mob":"0000000009"}}`
    aMap := make(map[string]interface{})
    err := json.Unmarshal([]byte(jsonString), &aMap)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%+v\n", aMap)
    fmt.Printf("Address := %s\n",aMap["detail"].(map[string]interface{})["address"])

https://play.golang.org/p/3133C_sKDf4

1
titogeo 5 dic. 2019 a las 06:15

Lo primero es lo primero, su JSON parece no ser válido. Parece que faltan algunas citas.
Intente validar sus datos de muestra aquí y verá qué tiene de malo.

Alternativamente, para decodificar su JSON en un mapa, también puede desarmarlo en una estructura siempre que conozca su estructura de antemano.

type User struct {
    FirstName string `json:"fname"`
    LastName  string `json:"lname"`
    Detail    Detail `json:"detail"`
}

type Detail struct {
    Address string `json:"address"`
    Mobile  string `json:"mob"`
}



if err := json.NewDecoder(strings.NewReader(out)).Decode(&u); err != nil {
    log.Fatal(err)
}

Ejemplo de trabajo completo

0
Jose Bagatelli 5 dic. 2019 a las 06:33