在JSON API中表示无穷大的最佳方法是什么?例如,可以免费阅读本月的文章(对于某些订阅,这将是一个有限的数字,对于高级订阅,这将是无限的).
返回null此用例或扩展 JSON并使用javascript的Infinity值是一个更好的主意吗?后者似乎更合适,但我从未见过这样做的API的例子.
如果有人有任何代表无限的公共Web API的例子,那也很酷.
我正在研究将 NaN/Infinity 支持添加到使用 JSONRPC 进行客户端/服务器交互的现有科学应用程序的可行性。许多 JSON 库确实处理(在某些情况下可选)NaN 和 Infs,例如:
我知道JSON 规范不支持 NaN 和 Infinity ,并且知道相关 问题。但是,AFAICT 是否有某种方法可以强制本机 JSJSON.stringify()方法发出 NaN/Infinity,或者是否有一个 JS JSON 库可以执行相同操作的问题尚未得到解答。与参考问题的细微差别,也许,但很重要。到目前为止,我一直无法发现这样的方法或库,所以我在这里。编写自己的 JSON 序列化程序是唯一的选择吗?
请注意,replacement参数 ofJSON.stringify()没有帮助,至少在我手中。
更新:将NaN/Infinity 等作为字符串发出会使这些字符串的语义不明确。它们需要像在 Python 和 GSON 实现中一样作为裸字发出。
我设法找到了一个错误(可能不是错误,但麻烦重重),花了很长时间才能找到答案,并且可以使用REPL(NodeJS)复制它:
> o = {};
{}
> JSON.stringify(o)
'{}'
> o.n = 10
10
> JSON.stringify(o)
'{"n":10}'
> o.n = Infinity;
Infinity
> JSON.stringify(o)
'{"n":null}'
> null == Infinity
false
> null === Infinity
false
> typeof 10
'number'
> typeof Infinity
'number'
Run Code Online (Sandbox Code Playgroud)
当您将其Infinity放入JSON时null,尽管Infinity是一种number类型,它仍会变为。通常情况下,谁在乎,但是当-Infinity,NaN,0,并且Infinity都在你的应用程序(机器学习)的背景下特殊的意义,它能够传送特别号码为纯JSON是很重要的,而不诉诸馅和拆箱它变成每一次的字符串。
字符串填充需要对每次访问进行额外的类型检查,然后将开关案例字符串与所有特殊数字类型进行比较,然后将其重新分配为实际的特殊数字类型。一次还不错,每分钟40或50万亿次是您真正开始诅咒ECMA之神的地方。
我是否缺少某些东西,或者这仅仅是ECMA认为不是那么重要的事情之一?