这是我的绳子

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

这里的消息包含单引号,这与JSON中使用的引号相同。我所做的是从用户输入(如message)填充字符串。我需要转义那些会破坏代码的特殊场景。但是除了字符串替换之外,有没有办法让它们转义,但仍然允许HTML将它们处理回正确的消息?


当前回答

使用encodeURIComponent()对字符串进行编码。

Eg.:

var product_list = encodeURIComponent(JSON.stringify(product_list));

你不需要解码它,因为web服务器会自动做同样的事情。

其他回答

也许我来的太晚了,但是这将解析/转义单引号(不想陷入解析vs转义的战斗)..

JSON.parse("\"'\"")

每个人都在讨论如何转义' in '引号中的字符串字面量。这里有一个更大的问题:单引号字符串文字不是有效的JSON。JSON是基于JavaScript的,但这不是一回事。如果你在JavaScript代码中编写对象文字,没问题;如果你真的需要JSON,你需要使用”。

对于双引号字符串,您不需要转义`。(如果你确实想在字符串中使用“”,你可以使用“\”。)

使用encodeURIComponent()对字符串进行编码。

Eg.:

var product_list = encodeURIComponent(JSON.stringify(product_list));

你不需要解码它,因为web服务器会自动做同样的事情。

关于AlexB的帖子:

 \'  Apostrophe or single quote
 \"  Double quote

转义单引号只在单引号json字符串中有效 转义双引号只在双引号的json字符串中有效

例子:

'Bart\'s car'       -> valid
'Bart says \"Hi\"'  -> invalid

这些答案大多要么没有回答问题,要么在解释中不必要地冗长。

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),
    ...
}

这将为您转义字符。

Mark Amery也提出了这个建议,顺便说一句,回答得很好

希望这能帮助到一些人。