首页 > 后端开发 > Golang > 正文

JSON 数字在解组到接口后被截断

PHPz
发布: 2024-02-10 09:48:08
转载
563 人浏览过

JSON 数字在解组到接口后被截断

在开发过程中,我们经常会使用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 将以下内容之一存储在接口值中:

  • bool,用于 json 布尔值
  • float64,用于 json 数字
  • ...

您可以创建解码器并调用 (*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中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!