Home >Backend Development >Golang >How to Decode JSON Strings with Float64 Values Stored as Strings in Go?
Decoding JSON with Type Conversion from String to float64 in Go
Parsing JSON strings that contain float64 values can pose challenges when the values are stored as strings. To address this issue, Go provides a straightforward solution.
Understanding the Error:
When attempting to decode a JSON string like "{"name":"Galaxy Nexus", "price":"3460.00"}" using the json.Unmarshal function, you might encounter the following error:
json: cannot unmarshal string into Go value of type float64
This error occurs because the JSON decoder tries to convert the string representation of the float64 number to a float64 value directly, which is not supported.
Solution: Type Conversion Annotation
To resolve this issue, you need to explicitly instruct the decoder to treat the string as a float64 using a type conversion annotation. This annotation is added to the field definition in the Product struct:
type Product struct { Name string Price float64 `json:",string"` }
The ",string" tag tells the JSON decoder that the Price field is a string that should be converted to a float64.
Updated Code:
Here's the updated Go code:
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) } }
Expected Output:
Running this code will produce the expected output:
{Name:Galaxy Nexus Price:3460}
The json.Unmarshal function successfully decoded the JSON string and converted the price from a string to a float64.
The above is the detailed content of How to Decode JSON Strings with Float64 Values Stored as Strings in Go?. For more information, please follow other related articles on the PHP Chinese website!