这是我的字符串
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
此处消息包含单引号,与JSON中使用的引号相同。我所做的是从用户输入(例如消息)中填充一个字符串。所以,我需要逃避那些破坏代码的特殊场景。但是除了字符串替换,还有什么方法可以让它们逃逸,但仍然允许 HTML 将它们处理回正确的消息?
最佳答案
对于一个关于基本主题的备受关注的问题,存在高度支持的错误信息,我感到震惊。
JSON 字符串不能用单引号引起来。各种版本的规范(Douglas Crockford 的 the original、the ECMA version 和 IETF version)都规定字符串必须用双引号引起来。这不是一个理论问题,也不是目前公认的答案所暗示的意见问题;如果您尝试让它解析单引号字符串,那么现实世界中的任何 JSON 解析器都会出错。
Crockford 和 ECMA 的版本甚至使用漂亮的图片来显示字符串的定义,这应该清楚地表明这一点:
漂亮的图片还列出了 JSON 字符串中的所有合法转义序列:
\"
\\
\/
\b
\f
\n
\r
\t
\u
后跟四位十六进制数字请注意,与此处其他一些答案中的废话相反,\'
绝不是 JSON 字符串中的有效转义序列。不需要,因为 JSON 字符串总是双引号。
最后,当以编程方式生成 JSON 时,您通常不必考虑自己转义字符(当然,在手动编辑例如基于 JSON 的配置文件时,您会考虑)。相反,使用您的语言具有的任何 native 映射、数组、字符串、数字、 bool 值和空类型来形成您想要编码的数据结构,然后使用 JSON 编码函数将其编码为 JSON。这样的函数可能内置在您使用的任何语言中,例如 JavaScript 的 JSON.stringify
。 , PHP 的 json_encode
, 或 Python 的 json.dumps
.如果您使用的语言没有内置此类功能,您可能会找到一个 JSON 解析和编码库来使用。如果您只是使用语言或库函数将事物与 JSON 进行转换,您甚至不需要知道 JSON 的转义规则。这是被误导的提问者应该做的。
https://stackoverflow.com/questions/19176024/