6

JSON 不是 JavaScript 的子集。我需要我的输出是 100% 有效的 JavaScript;它将被如此评估——即,JSON.stringify不会(总是)满足我的需要。

Node 有 JavaScript 字符串化器吗?

作为奖励,如果它可以对对象进行字符串化,那就太好了。

4

2 回答 2

12

您可以使用JSON.stringify然后替换剩余的 U+2028 和 U+2029 字符。正如文章链接所述,字符只能出现在字符串中,因此我们可以安全地用它们的转义版本替换它们,而不必担心替换我们不应该替换它们的字符:

JSON.stringify('ro\u2028cks').replace(/\u2028/g,'\\u2028').replace(/\u2029/g,'\\u2029')
于 2013-04-14T23:25:03.760 回答
1

从您链接的文章的最后一段中:

解决方案

幸运的是,解决方案很简单:如果我们查看 JSON 规范,我们会发现 U+2028 或 U+2029 可能出现的唯一位置是字符串。因此,每当我们需要发送一些 JSONP 时,我们可以简单地将每个 U+2028 替换为 \u2028(转义序列),并将 U+2029 替换为 \u2029。

它已经在 Rack::JSONP 中得到修复,我鼓励所有发送 JSONP 的框架或库也这样做。在大多数语言中,它是一个单行补丁,结果仍然是 100% 有效的 JSON。

于 2013-04-14T22:28:12.813 回答