有一个 node.js 应用程序,接收包含文字 NaN 的 JSON 数据字符串,例如:
这会导致Node.js中的
我知道
在这里,尽管数据是由我无法控制的商业Java库生成的,但我可以看到源代码。它是由Google的Gson库生成的:
这似乎是一个合法的来源。根据Gson API Javadoc所说,我应该能够解析它:
引用: JSON规范的第2.4节禁止特殊双精度值(NaN、Infinity、-Infinity)。然而,Javascript规范(见第4.3.20、4.3.22、4.3.23节)允许这些值作为有效的Javascript值。此外,大多数JavaScript引擎将在JSON中接受这些特殊值而没有问题。因此,在实际层面上,即使JSON规范不允许它们,接受这些值作为有效的JSON也是有意义的。
尽管如此,在Node.js和Chrome中都失败了:
我已经谷歌了一段时间,但似乎找不到关于这个问题的文档。
"[1, 2, 3, NaN, 5, 6]"
这会导致Node.js中的
JSON.parse(...)
崩溃。如果可能的话,我想将其解析为一个对象。我知道
NaN
不是JSON规范的一部分。大多数SO链接(sending NaN in json)建议修复输出。在这里,尽管数据是由我无法控制的商业Java库生成的,但我可以看到源代码。它是由Google的Gson库生成的:
private Gson gson = (new GsonBuilder().serializeSpecialFloatingPointValues().create());
...
gson.toJson(data[i], Vector.class, jsonOut)
这似乎是一个合法的来源。根据Gson API Javadoc所说,我应该能够解析它:
引用: JSON规范的第2.4节禁止特殊双精度值(NaN、Infinity、-Infinity)。然而,Javascript规范(见第4.3.20、4.3.22、4.3.23节)允许这些值作为有效的Javascript值。此外,大多数JavaScript引擎将在JSON中接受这些特殊值而没有问题。因此,在实际层面上,即使JSON规范不允许它们,接受这些值作为有效的JSON也是有意义的。
尽管如此,在Node.js和Chrome中都失败了:
JSON.parse('[1,2,3,NaN,"5"]')
是否有在JSON.parse()中设置的标志?或者有一种替代解析器可以接受NaN
作为字面量?我已经谷歌了一段时间,但似乎找不到关于这个问题的文档。