Json 未捕获的语法错误:意外标记-由于双反斜杠

Json 未捕获的语法错误:意外标记-由于双反斜杠,json,Json,我似乎有一个奇怪的问题,我得到了一个“未捕获的SyntaxError:意外的令牌p”错误。这是由于双反斜杠。但需要双反斜杠来转义反斜杠,这似乎是100%有效的JSON,它是由php的JSON_encode函数生成的 var urls = '{"MyApp\\Posts\\Post":"foo","MyApp\\Threads\\Thread":"bar"}'; obj = jQuery.parseJSON(urls); 如果您console.log(URL),您可以看到传递给JSON解析器的字

我似乎有一个奇怪的问题,我得到了一个“未捕获的SyntaxError:意外的令牌p”错误。这是由于双反斜杠。但需要双反斜杠来转义反斜杠,这似乎是100%有效的JSON,它是由php的JSON_encode函数生成的

var urls = '{"MyApp\\Posts\\Post":"foo","MyApp\\Threads\\Thread":"bar"}';
obj = jQuery.parseJSON(urls);
如果您
console.log(URL)
,您可以看到传递给JSON解析器的字符串值:

{"MyApp\Posts\Post":"foo","MyApp\Threads\Thread":"bar"}
但是,
\
是JSON中的转义字符,
\p
是无效的转义序列


“问题”在于反斜杠也是JS字符串中的转义字符。如果要在JSON的JS字符串中生成文本反斜杠,则必须对其进行双重转义:

var urls = '{"MyApp\\\\Posts\\\\Post":"foo","MyApp\\\\Threads\\\\Thread":"bar"}';
也就是说,在JS中使用JSON的字符串文本没有任何价值。您可以只使用对象文字:

var urls = {"MyApp\\Posts\\Post":"foo","MyApp\\Threads\\Thread":"bar"};

注意:例如,如果JSON不是字符串文本,但是您从Ajax调用中得到响应,那么

{"MyApp\\Posts\\Post":"foo","MyApp\\Threads\\Thread":"bar"}'
是有效的JSON