有一个 node.js 应用程序正在接收包含文字 NaN 的 JSON 数据字符串,例如
"[1, 2, 3, NaN, 5, 6]"
JSON.parse(...)
这在 Node.js 中崩溃。如果可以的话,我想将其解析为一个对象。
我知道NaN
不是 JSON 规范的一部分。大多数 SO 链接(在 json 中发送 NaN)建议修复输出。
在这里,虽然数据是在我无法控制的服务器中生成的,但它是由一个商业 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
作为文字的替代解析器?
我已经在谷歌上搜索了一段时间,但似乎找不到关于这个问题的文档。