在开发过程中,我们经常会使用JSON格式来传输数据。然而,有时候我们会发现在解组JSON数据到接口后,数字数据会被截断。这是一个很常见的问题,但却很容易被忽视。在本文中,php小编子墨将详细介绍这个问题的原因,以及如何避免和解决这个问题,确保数字数据的完整性和准确性。
所以我有一个包含许多字段的 json,并且我按照建议循环遍历它 如何有效地更改 json 键 删除一些我不需要的键。但是删除后,现有json的原始值发生了变化,其中一些似乎是浮点数,我做了一个演示来展示它。
如何改变这种行为?是 interface{}
导致了该问题吗?为什么1684366653200744506
被截断为1684366653200744400
?
谢谢!
https://go.dev/play/p/x2auwqwb2fl
作为参考,输出 json 更改为 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}
这是因为默认情况下,encoding/json
包将 float64
存储在 json 数字的接口值中。请参阅 json.unmarshal:
要将 json 解组为接口值,unmarshal 将以下内容之一存储在接口值中:
您可以创建解码器并调用 (*decoder).usenumber改变行为:
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 {
参见https://www.php.cn/link/3a6c2c9231df58107434b942fa600b22.
以上是JSON 数字在解组到接口后被截断的详细内容。更多信息请关注PHP中文网其他相关文章!