JSON生态系统中Infinity、-Infinity和NaN的互操作性?

nafvub8i  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(143)

我试图了解Infinity, -Infinity, NaN在JSON世界中是否有某种可移植性(StringNumericLiteral)。我知道Infinity, -Infinity, NaNJSON中没有指定,我只是试图在不同语言之间找到一个共同点。
最后,它应该与JavaScript兼容。

knpiaxh1

knpiaxh11#

基于一些实验(F12在谷歌Chrome),我看到那些特殊的Number值的扩展如下:

> Number("-Infinity")
-Infinity

字符串
同时:

> Number("-Inf")
NaN


我认为有两个候选者可以实现某种互操作性:

  1. [NaN, Infinity, -Infinity]
  2. ["NaN", "Infinity", "-Infinity"]
    现在,如果我需要在不同的语言/框架中处理这个JSON文件。这是我今天观察到的(目标是生成的JSON在处理时不会触发异常):
    | 语言|没有引号|With quotes|
    | --|--|--|
    | Node.js |0not supported|由于数字强制,|
    | Python3| supported(allow_nan=True)|不受支持|
    | System.Text.Json.JsonSerializer的|不受支持|1supported (AllowNamedFloatingPointLiterals)|
    | System.Text.Json.JsonNode的|1not supported|不受支持|
    | Json.NET |1supported|支持的URL(来自用户dbc的贡献)|
    我想我们还可以添加更多。但结论是,基于所使用的框架,NaN,Infinity,-Infinity的JSON扩展是不兼容的。
    因此,到目前为止,执行这些特殊值的唯一可移植方法是将这些值作为字符串表示:
["NaN", "Infinity", "-Infinity"]


"NaN"是一个特殊的字符串,需要特别注意,因为任何无效的字符串都会在ECMAScript中返回NaN

相关问题