有没有办法让 serde_json 正确/不正确地处理 NaN、Inf 和 -Inf(IEEE 754 Specials)?

问题描述 投票:0回答:1

官方 JSON 规范不支持 IEEE 754,而是有自己的 null(不是“null”)或普通数字约定。

在许多语言和用例中,人们会忽略这一点并偏离规范来支持 IEEE754 浮点数。例如在Python中

>>> json.dumps(dict(a = np.inf, b = -np.inf, c = np.nan), allow_nan=True)
'{"a": Infinity, "b": -Infinity, "c": NaN}'

在这种情况下,allow_nan 默认为 True。

同样在 C# 中,我们可以将数字处理设置为AllowNamedFloatingPointLiterals 以获得相同的行为

https://learn.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonnumberhandling?view=net-8.0

那么,我们怎样才能让 rust/serde_json 做同样的事情 - serde_json 中是否有一个标志可以做到这一点,如果没有,添加此功能的最简单方法是什么? (我的意思是作为用户实现此功能,而不是通过更新 serde_json 源或分叉它或任何其他方式)。

json rust ieee-754 serde serde-json
1个回答
0
投票

不受支持

维护者的答案并不完全清楚,因为我不认为 serde_json 公开了可以添加后备的反序列化器挂钩,而且我认为通常的解决方案(

deserialize_with
)对此来说已经太晚了。

因此,您可能想要要求精度,但乍一看,您似乎必须维护 serde_json 的定制供应商/分支来支持非标准扩展。

© www.soinside.com 2019 - 2024. All rights reserved.