相关疑难解决方法(0)

JSON遗漏了Infinity和NaN; ECMAScript中的JSON状态?

知道为什么JSON遗漏了NaN和+/- Infinity?它将Javascript放在奇怪的情况下,否则,如果它们包含NaN或+/-无穷大值,那么否则可以序列化的对象不会.

看起来像是一成不变的:见RFC4627ECMA-262(第24.3.2节,JSON.stringify,第4节,第507页,最后编辑):

有限数字通过调用进行字符串化ToString(number).无论符号如何,NaN和Infinity都表示为String null.

javascript json ecma262

161
推荐指数
6
解决办法
6万
查看次数

你如何在JSON API中表示无穷大?

在JSON API中表示无穷大的最佳方法是什么?例如,可以免费阅读本月的文章(对于某些订阅,这将是一个有限的数字,对于高级订阅,这将是无限的).

返回null此用例或扩展 JSON并使用javascript的Infinity值是一个更好的主意吗?后者似乎更合适,但我从未见过这样做的API的例子.

如果有人有任何代表无限的公共Web API的例子,那也很酷.

api json infinity

9
推荐指数
3
解决办法
2486
查看次数

强制 JSON.stringify() 发出 NaN / Infinity 或这样做的 JS JSON 库

我正在研究将 NaN/Infinity 支持添加到使用 JSONRPC 进行客户端/服务器交互的现有科学应用程序的可行性。许多 JSON 库确实处理(在某些情况下可选)NaN 和 Infs,例如:

  • Python json读写
  • Java Jackson读取但写入字符串而不是裸字
  • Java GSON读写
  • Javascript 可以读取

我知道JSON 规范不支持 NaN 和 Infinity ,并且知道相关 问题。但是,AFAICT 是否有某种方法可以强制本机 JSJSON.stringify()方法发出 NaN/Infinity,或者是否有一个 JS JSON 库可以执行相同操作的问题尚未得到解答。与参考问题的细微差别,也许,但很重要。到目前为止,我一直无法发现这样的方法或库,所以我在这里。编写自己的 JSON 序列化程序是唯一的选择吗?

请注意,replacement参数 ofJSON.stringify()没有帮助,至少在我手中。

更新:将NaN/Infinity 等作为字符串发出会使这些字符串的语义不明确。它们需要像在 Python 和 GSON 实现中一样作为裸字发出。

javascript json nan infinity

5
推荐指数
1
解决办法
3656
查看次数

所以我不能将Infinity作为数字放入JSON,可以吗?

我设法找到了一个错误(可能不是错误,但麻烦重重),花了很长时间才能找到答案,并且可以使用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类型,它仍会变为。通常情况下,谁在乎,但是当-InfinityNaN0,并且Infinity都在你的应用程序(机器学习)的背景下特殊的意义,它能够传送特别号码为纯JSON是很重要的,而不诉诸馅和拆箱它变成每一次的字符串。

字符串填充需要对每次访问进行额外的类型检查,然后将开关案例字符串与所有特殊数字类型进行比较,然后将其重新分配为实际的特殊数字类型。一次还不错,每分钟40或50万亿次是您真正开始诅咒ECMA之神的地方。

我是否缺少某些东西,或者这仅仅是ECMA认为不是那么重要的事情之一?

javascript json infinity node.js

1
推荐指数
1
解决办法
2460
查看次数

标签 统计

json ×4

infinity ×3

javascript ×3

api ×1

ecma262 ×1

nan ×1

node.js ×1