Home >Backend Development >Golang >JSON number truncated after unmarshaling to interface
During the development process, we often use JSON format to transmit data. However, sometimes we find that after unmarshalling the JSON data into the interface, the numeric data is truncated. This is a very common question, but one that is easily overlooked. In this article, PHP editor Zimo will introduce in detail the causes of this problem and how to avoid and solve this problem to ensure the integrity and accuracy of digital data.
So I have a json with many fields and I'm looping through it as suggested How to change json keys efficiently Remove some keys that I don't need. But after deletion, the original values of the existing json changed, some of them seemed to be floats, I made a demo to show it.
How to change this behavior? Is interface{}
causing the problem? Why is 1684366653200744506
truncated to 1684366653200744400
?
Thanks!
https://go.dev/play/p/x2auwqwb2fl
For reference, the output json is changed to 1684366653200744400
2009/11/10 23:00:00 1684366653200744448.000000 2009/11/10 23:00:00 map[timestamp:1.6843666532007444e+18] 2009/11/10 23:00:00 json Marshal from maps of key string and value interface to batch json for insert to DB 2009/11/10 23:00:00 {"timestamp":1684366653200744400}
This is because by default, the encoding/json
package stores float64
in the interface value of a json number. See json.unmarshal:
To unmarshal json into an interface value, unmarshal stores one of the following in the interface value:
You can create a decoder and call (*decoder).usenumberChange the behavior:
jsonBatch := `{"timestamp":1684366653200744506, "todelete":"string value or boolean value"}` dec := json.NewDecoder(strings.NewReader(jsonBatch)) dec.UseNumber() var i interface{} if err := dec.Decode(&i); err != nil {
Seehttps://www.php.cn/link/3a6c2c9231df58107434b942fa600b22.
The above is the detailed content of JSON number truncated after unmarshaling to interface. For more information, please follow other related articles on the PHP Chinese website!