You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让serde_json处理IEEE 754特殊值?含替代方案咨询

关于serde_json处理IEEE 754特殊浮点数的问题

官方JSON规范并不支持IEEE 754标准中的特殊浮点数(无穷大、负无穷大、非数值NaN),仅允许使用null或常规数字。但不少编程语言和使用场景会绕过这一规范,直接支持这类特殊浮点数的序列化:

  • Python中,json.dumps的allow_nan参数默认值为True,可以直接序列化特殊浮点数:
>>> json.dumps(dict(a = np.inf, b = -np.inf, c = np.nan), allow_nan=True)
'{"a": Infinity, "b": -Infinity, "c": NaN}'
  • C#中,可通过设置数字处理选项为AllowNamedFloatingPointLiterals实现相同行为。

核心问题

在Rust的serde_json中,如何实现上述兼容IEEE 754特殊浮点数的序列化功能?serde_json是否提供了对应的配置项?如果没有,无需修改或fork serde_json源码的情况下,用户最简单的实现方式是什么?

补充疑问

如果认为JSON本身存在不足,有没有可以完全支持浮点数的替代序列化格式?
或者,如何实现一种符合JSON规范的替代方案(比如将"Infinity"这类特殊值转为字符串),同时不影响其他序列化格式(如BSON、CBOR、msgpack等)的正常使用?

调研后的进一步疑问

我自己调研发现两种可能的方向,想确认是否可行:

  • JSON5是JSON的扩展格式,同时保持向后兼容,是否适合用来处理特殊浮点数?
  • 能否通过serde的无标签枚举实现特殊处理逻辑?比如让serde_json在序列化特殊浮点数时触发失败(严格遵循JSON规范),进而触发fallback处理?

内容的提问来源于stack exchange,提问作者Corvus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:27:44