【发布时间】:2017-03-27 10:20:50
【问题描述】:
假设我希望将文字字符串“\u”存储在 JSON 字符串中。
This answer provides a nice visual overview of escape sequences in JSON,但从图片上看不清楚是同时逃逸还是依次逃逸。
考虑以下 JSON:
{
"foo": "a\\u"
}
这应该 - 至少对我来说 - 是有效的 JSON,其中 foo 包含字符串 a\u。
但是\u 是 Unicode 字符的转义序列,并且必须 - 通常 - 后跟四个十六进制字符。
当我通过 Json Parser Online 输入相同的 JSON 时,我相信使用 JSON.stringify 会产生以下错误:“\u 必须后跟 4 个十六进制字符”。
我还尝试在 Firefox 和 Chrome 的控制台中输入以下内容:
var json = JSON.stringify(eval("(" + '{"foo": "a\\u"}' + ")"));
两者都会产生 Unicode 转义序列错误。甚至库 superobject for Delphi 也会产生相同的错误(或者实际上,它只是抛出 JSON 解析错误)。
查看字符串上的RFC 7159,确实提到了这些转义序列,但没有提到顺序。
在我看来,JSON 标准没有考虑以下序列\\u,或者至少,解析器处理得不好。如果\\先被转义,\\u变成\u和\u就会出错。如果\u首先被转义,那么它在到达\\之前就会产生错误。
这对于rich text in JSON 来说是一个特别的问题,因为\uc1 和\uc2 是RTF 中常见的控制序列。有问题的答案并没有真正涉及到这个主题,但这个问题似乎也被抛弃了。
所以一个理论上的问题是:如何(以及应该如何)转义转义序列?
还有一个更实际的问题是:除了简单地为\ 或u(例如a\u005Cu)提供Unicode 序列之外,我如何将字符串文字\u 转换为JSON 字符串?
【问题讨论】:
标签: json