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

时间:2011-10-10 19:21:38

标签: javascript json

我在javascript中有一个字符串:

var test = '{"test":"\\-"}'

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

JSON.parse(test)

或与:

$.parseJSON(test)

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

5 个答案:

答案 0 :(得分:18)

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

正如您在these diagrams中看到的那样,\-不是有效的转义序列(有效的是\"\\\/,{{1} },\b\f\n\r\t)。

JSONLint也会出错

\uxxxx

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

Parse error on line 2:
{    "test": "\-"}
-------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

否则,省略它:

var test = '{"test": "\\\\-"}';

答案 1 :(得分:3)

您的JSON如下所示:

{
    "test": "\-"
}

在字符串中,\个字符must be followed by "\/bf,{ {1}},nrt,其中问号代表十六进制数字。

您可能希望JSON看起来像这样:

u????

无法正确转换为JavaScript字符串,但无法转义JavaScript的{ "test": "\\-" } 个字符。

\

答案 2 :(得分:1)

你走了:

var test = '{"test":"\-"}'
JSON.parse(test)

这就是你想要的吗?要:{test: "-"}

Otherwiste:

var test = '{"test":"\\\\-"}'
JSON.parse(test)

拥有:{test:"\-"}

干杯

答案 3 :(得分:0)

您希望测试的价值是多少? \是JavaScript中的转义字符。假设你试图逃避它并且你希望test的值为\-,这将有效:

var test = '{"test":"\\\\-"}'

//Result: { test="\-"}

答案 4 :(得分:0)

当我尝试解析该字符串时,我得到“糟糕的转义字符”。

原因是你正在逃避一个不需要转义的角色。字符串文字中的\\是一个转义反斜杠,因此该字符串包含转义码\-。破折号不需要转义,因此JSON解析器不允许转义代码。

如果你想在JSON中放入一个转义反斜杠,你必须将它转义为文字字符串:

var test = '{"test":"\\\\-"}'