unmarshal print handling golang examples deserialize json go

print - ¿Cómo decodificar JSON con el tipo convertir de cadena a float64 en Golang?



string interface golang (3)

Al pasar un valor entre comillas, se verá como una cadena. Cambiar "price":"3460.00" a "price":3460.00 y todo funciona bien.

Si no puede soltar las comillas, tiene que analizarlas usted mismo, usando strconv.ParseFloat :

package main import ( "encoding/json" "fmt" "strconv" ) type Product struct { Name string Price string PriceFloat float64 } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { pro.PriceFloat, err = strconv.ParseFloat(pro.Price, 64) if err != nil { fmt.Println(err) } fmt.Printf("%+v/n", pro) } else { fmt.Println(err) fmt.Printf("%+v/n", pro) } }

Necesito decodificar una cadena JSON con el número flotante como:

{"name":"Galaxy Nexus", "price":"3460.00"}

Uso el código de Golang a continuación:

package main import ( "encoding/json" "fmt" ) type Product struct { Name string Price float64 } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { fmt.Printf("%+v/n", pro) } else { fmt.Println(err) fmt.Printf("%+v/n", pro) } }

Cuando lo ejecuto, obtengo el resultado:

json: cannot unmarshal string into Go value of type float64 {Name:Galaxy Nexus Price:0}

Quiero saber cómo decodificar la cadena JSON con type convert.


La respuesta es considerablemente menos complicada. Solo agrega tell the JSON Interpeter, es una cadena codificada float64 with ,string (ten en cuenta que solo cambié la definición de Price ):

package main import ( "encoding/json" "fmt" ) type Product struct { Name string Price float64 `json:",string"` } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { fmt.Printf("%+v/n", pro) } else { fmt.Println(err) fmt.Printf("%+v/n", pro) } }


Solo te digo que puedes hacer esto sin Unmarshal y usar json.decode . Aquí está Go Playground

package main import ( "encoding/json" "fmt" "strings" ) type Product struct { Name string `json:"name"` Price float64 `json:"price,string"` } func main() { s := `{"name":"Galaxy Nexus","price":"3460.00"}` var pro Product err := json.NewDecoder(strings.NewReader(s)).Decode(&pro) if err != nil { fmt.Println(err) return } fmt.Println(pro) }