返回顶部
首页 > 资讯 > 精选 >JSON 数字在解组到接口后被截断
  • 311
分享到

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

2024-02-10 10:02:46 311人浏览 泡泡鱼
摘要

在开发过程中,我们经常会使用JSON格式来传输数据。然而,有时候我们会发现在解组jsON数据到接口后,数字数据会被截断。这是一个很常见的问题,但却很容易被忽视。在本文中,PHP小编子墨

开发过程中,我们经常会使用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 数字在解组到接口后被截断的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: JSON 数字在解组到接口后被截断

本文链接: https://www.lsjlt.com/news/563000.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作