这是我的字符串
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
Run Code Online (Sandbox Code Playgroud)
这里的消息包含单引号,与JSON中使用的引用相同.我所做的是填写用户输入的字符串,如消息.所以,我需要摆脱那些破坏代码的特殊场景.但除了字符串替换之外,是否有任何方法可以使它们转义但仍允许HTML将它们处理回正确的消息?
Mar*_*ery 341
我对这个关于基本话题这样一个备受关注的问题的高度倾斜的错误信息的存在感到震惊.
JSON字符串不能用单引号引用.规范的各种版本(Douglas Crockford 的原始版本,ECMA版本和IETF版本)都声明字符串必须用双引号引用.这不是一个理论问题,也不是一个意见问题,正如目前所接受的答案所暗示的那样; 如果你试图解析单引号字符串,现实世界中的任何JSON解析器都会出错.
Crockford和ECMA的版本甚至使用漂亮的图片显示字符串的定义,这应该明确地说清楚:

漂亮的图片还列出了JSON字符串中的所有合法转义序列:
\"\\\/\b\f\n\r\t\u 接着是四个十六进制数字请注意,与此处其他一些答案中的废话相反,\'JSON字符串中永远不是有效的转义序列.它不需要,因为JSON字符串总是双引号.
最后,在编程生成JSON 时,通常不必考虑自己转义字符(当然,当手动编辑时,例如,基于JSON的配置文件).相反,使用您的语言具有的任何本机映射,数组,字符串,数字,布尔值和空类型来编码要编码的数据结构,然后使用JSON编码函数将其编码为JSON.这样的函数可能内置于您正在使用的任何语言中,如JavaScript JSON.stringify,PHP json_encode或Python json.dumps.如果您使用的语言没有内置此类功能,您可能会找到要使用的JSON解析和编码库.如果您只是使用语言或库函数将事物转换为JSON,那么您甚至不需要知道JSON的转义规则.这就是被误导的问题提问者应该做的事情.
Ale*_*exB 272
根据规范,JSON字符串必须是双引号,因此您无需转义'.
如果必须在JSON字符串中使用特殊字符,则可以使用\字符对其进行转义.
请参阅JSON中使用的此特殊字符列表:
\b Backspace (ascii code 08)
\f Form feed (ascii code 0C)
\n New line
\r Carriage return
\t Tab
\" Double quote
\\ Backslash character
Run Code Online (Sandbox Code Playgroud)
但是,即使它完全违反规范,作者也可以使用\'.
这很糟糕,因为:
但是,无论你想要与否,它都有效.
对于新读者,请始终对json字符串使用双引号.
Dav*_*ipe 32
每个人都在谈论如何'在一个'引用的字符串文字中逃避.这里有一个更大的问题:单引号字符串文字不是有效的JSON.JSON基于JavaScript,但它不是一回事.如果你在JavaScript代码中编写一个对象文字,那很好; 如果你真的需要JSON,你需要使用".
使用双引号字符串,您不需要逃避'.(如果你确实想要"字符串中的文字,你可以使用\".)
这些答案中的大多数要么不回答问题,要么在解释中不必要地长.
好的,所以JSON只使用双引号,我们得到了!
我试图使用JQuery AJAX将JSON数据发布到服务器,然后再返回相同的信息.我发现的问题的最佳解决方案是使用:
var d = {
name: 'whatever',
address: 'whatever',
DOB: '01/01/2001'
}
$.ajax({
type: "POST",
url: 'some/url',
dataType: 'json',
data: JSON.stringify(d),
...
}
Run Code Online (Sandbox Code Playgroud)
这将为你逃脱角色.
Mark Amery也提出了这一点,BTW很棒
希望这有助于某人.
| 归档时间: |
|
| 查看次数: |
653889 次 |
| 最近记录: |