新闻详情

新闻详情

首页 / 资讯中心 / 详情

JSON 文件序列化中设置 float 的 NaN 或无穷大值

发布时间:2026/9/29 2:16:26来源:尧图网络
JSON 文件序列化中设置 float 的 NaN 或无穷大值
在使用json.dumps()序列化数据时如果数据包含NaNNot a Number、Infinity正无穷或-Infinity负无穷等特殊浮点值会引发ValueError: Out of range float values are not JSON compliant因为标准的 JSON 规范并不支持这些特殊浮点数。解决方案为了避免ValueError可以在序列化前对数据进行预处理将NaN和无限值转换为可接受的格式。常见的处理方式包括手动替换这些值或使用自定义的JSONEncoder进行编码。通过default参数在序列化前遍历数据将NaN和无限大的浮点数转换为字符串或null以确保 JSON 兼容性。该方法适用于简单的 JSON 结构其中每个float值都会被检查并转换。importjsondefhandle_non_compliant_floats(value):ifisinstance(value,float):ifvaluefloat(inf):returnInfinityelifvaluefloat(-inf):return-Infinityelifvalue!value:# 检测 NaNreturnNaNreturnvalue data{normal:1.0,high:float(inf),low:float(-inf),undefined:float(nan)}# 处理特殊浮点数并序列化safe_json_datajson.dumps(data,defaulthandle_non_compliant_floats)print(safe_json_data)另一种方式是自定义JSONEncoder覆盖default方法在 JSON 序列化时自动转换这些特殊值。这种方法适用于更复杂的数据结构因为json.dumps()会递归调用default()方法处理嵌套对象。classCustomEncoder(json.JSONEncoder):defdefault(self,obj):ifisinstance(obj,float):ifobjfloat(inf):returnInfinityelifobjfloat(-inf):return-Infinityelifobj!obj:# 处理 NaNreturnNaNreturnsuper().default(obj)# 使用自定义 JSON 编码器safe_json_datajson.dumps(data,clsCustomEncoder)print(safe_json_data)运行代码后原本包含NaN和Infinity的数据成功转换为 JSON 兼容的字符串格式避免了ValueError{normal:1.0,high:Infinity,low:-Infinity,undefined:NaN}此方法确保 JSON 序列化不会因超范围浮点数而失败同时保留数据的完整性以便后续处理或存储。通过预处理数据或使用JSONEncoder自定义编码规则可以有效解决 JSON 序列化时的ValueError问题。具体方法的选择取决于数据结构的复杂性以及对NaN和无限值的存储要求。如果需要严格符合 JSON 规范可以将这些值转换为null如果需要保留信息可用字符串表示它们的特殊状态。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

USBCANFD-200U与ZCANPRO实战:CANFD调试与DBC解析全流程 2026/9/29 20:19:09

USBCANFD-200U与ZCANPRO实战:CANFD调试与DBC解析全流程

前一阵有朋友问我,手里的USBCANFD-200U连上CANFD总线,ZCANPRO窗口里报文唰唰往外冒,但看到的全是十六进制字节,完全对不上车辆参数。这个问题我自己刚搞CANFD时也撞到过,网上讲标准CAN的教程一大堆,真正把C…

阅读更多 →
Ubuntu 下 VS Code 配 TaoToken:GitHub Copilot 统一 Key 接入与 settings.json 配置骨架 2026/9/29 20:19:03

Ubuntu 下 VS Code 配 TaoToken:GitHub Copilot 统一 Key 接入与 settings.json 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
教AI看片听片:Diffusion Studio的6大媒体分析工具完全指南 2026/9/29 20:19:03

教AI看片听片:Diffusion Studio的6大媒体分析工具完全指南

教AI看片听片:Diffusion Studio的6大媒体分析工具完全指南 【免费下载链接】editor An open-source video editor built for agents. Edits become code, code becomes video. 项目地址: https://gitcode.com/gh_mirrors/editor94/editor Diffusion Studio 是…

阅读更多 →
Keil中将device由 STM32F103ZE 改为 STM32F103C8 2026/9/29 20:19:03

Keil中将device由 STM32F103ZE 改为 STM32F103C8

1.点击魔法棒,点击device选择到STM32F103C8将STM32F10X_HD改为STM32F10X_MD3.将startup_stm32f10x_hd.s改为startup_stm32f10x_md.s,代码见后文4.开始调试,弹出如下提示解决办法:点击魔法棒,点击Utilities,…

阅读更多 →
淘宝上架商品怎么设置多个规格?完整教程+店铺引流增效技巧 2026/9/29 20:18:56

淘宝上架商品怎么设置多个规格?完整教程+店铺引流增效技巧

淘宝上架商品怎么设置多个规格?完整教程店铺引流增效技巧很多淘宝新手商家上架商品时,都会遇到一个常见难题:商品有尺码、颜色、款式、套餐等多种规格,却不知道如何正确设置多SKU,要么规格错乱、库存价格对应错误&…

阅读更多 →
SSRF漏洞详解:从原理到防御,堵死服务端请求伪造的跳板 2026/9/29 20:18:49

SSRF漏洞详解:从原理到防御,堵死服务端请求伪造的跳板

1. 先说清楚:为什么一个“能发起网络请求”的功能会变成跳板做安全测试和攻防对抗这么多年,我几乎每次遇到“URL回调”“图片抓取”“Webhook推送”这类功能,都会下意识多问一句:这个请求到底发到哪里去了?因为很多开发…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉