我在javascript中有一个字符串:
var test = '{"test":"\\-"}'
当我尝试使用以下内容将其解析为JSON时:
JSON.parse(test)
或与:
$.parseJSON(test)
我得到类型为“unexpected_token_number”的SyntaxError。
此"test"
属性的值是用户可输入字段。我应该如何正确地逃离这个领域?
答案 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 "
,\
,/
,b
,f
,{ {1}},n
,r
或t
,其中问号代表十六进制数字。
您可能希望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":"\\\\-"}'