解析JSON时导致此语法错误的原因是什么?

sol*_*oth 3 javascript json

我在javascript中有一个字符串:

var test = '{"test":"\\-"}'
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下内容将其解析为JSON时:

JSON.parse(test)
Run Code Online (Sandbox Code Playgroud)

或者:

$.parseJSON(test)
Run Code Online (Sandbox Code Playgroud)

我得到一个类型为"unexpected_token_number"的SyntaxError.此"test"属性的值是用户可输入字段.我应该如何正确地逃离这个领域?

Fel*_*ing 18

'{"test":"\\-"}'将被解释为JavaScript字符串,结果为{"test":"\-"}.

正如你可以看到在这些图中,\-是不是有效的转义序列(有效的是\",\\,\/,\b,\f,\n,\r,\t,\uxxxx).

JSONLint也给出了错误

Parse error on line 2:
{    "test": "\-"}
-------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
Run Code Online (Sandbox Code Playgroud)

如果你想在JSON中使用两个反斜杠,你也必须在JavaScript字符串中转义它们,所以你最终会得到它们

var test = '{"test": "\\\\-"}';
Run Code Online (Sandbox Code Playgroud)

否则,省略它:

var test = '{"test": "-"}';
Run Code Online (Sandbox Code Playgroud)