这是我的绳子

{
    '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将它们处理回正确的消息?


当前回答

使用模板文字…

var json = `{"1440167924916":{"id":1440167924916,"type":"text","content":"It's a test!"}}`;

其他回答

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

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

一个JSON字符串必须是双引号,根据规范,所以你不需要转义'。 如果必须在JSON字符串中使用特殊字符,可以使用\ character进行转义。

查看JSON中使用的特殊字符列表:

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character

然而,即使这与规范完全相反,作者也可以使用\'。

这很糟糕,因为:

这与说明书相反 它不再是JSON有效字符串

但不管你愿不愿意,它都管用。

对于新读者,总是在json字符串中使用双引号。

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

Eg.:

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

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

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

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也提出了这个建议,顺便说一句,回答得很好

希望这能帮助到一些人。

关于AlexB的帖子:

 \'  Apostrophe or single quote
 \"  Double quote

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

例子:

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