Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个字符串不可拆分?_Javascript_Json_Parsing_Escaping - Fatal编程技术网

Javascript 为什么这个字符串不可拆分?

Javascript 为什么这个字符串不可拆分?,javascript,json,parsing,escaping,Javascript,Json,Parsing,Escaping,当我看上面的代码时,所有的语法似乎都是正确的。我假设它是一个JSON字符串,可以转换回包含字符串“foo”和字符串“bar\”的数组,因为第一个反斜杠转义了第二个反斜杠 那么,为什么会出现意外的输入结束?我想这和反斜杠有关,但我想不出来。你需要加倍逃逸。使用模板文本和String.raw可以执行以下操作: JSON.parse('["foo", "bar\\"]'); //Uncaught SyntaxError: Unexpected end of JSON input 看起来您的代码应该是

当我看上面的代码时,所有的语法似乎都是正确的。我假设它是一个JSON字符串,可以转换回包含字符串“foo”和字符串“bar\”的数组,因为第一个反斜杠转义了第二个反斜杠


那么,为什么会出现意外的输入结束?我想这和反斜杠有关,但我想不出来。

你需要加倍逃逸。使用模板文本和
String.raw
可以执行以下操作:

JSON.parse('["foo", "bar\\"]'); //Uncaught SyntaxError: Unexpected end of JSON input

看起来您的代码应该是:

JSON.parse(String.raw`["foo", "bar\\"]`);
您的Json对象确实是
[“foo”,“bar\\\”]
,但是如果您想在JavaScript代码中表示它,您需要再次转义
\
字符,因此有四个
\
字符


关于

你为什么要在条后双重转义引号?您的字符串中是否明确需要一个\then?我正在做一个练习,这是一个测试用例。
\\“
实际上是
\”
,这意味着您正在转义字符串而不是关闭它。键入
'[“foo”,“bar\\\”]“
进入您的浏览器控制台,查看该文本实际创建的字符串-您将看到它不是有效的JSON。这似乎是一个字符串文本问题。例如,这将传递~
str=JSON.stringify('[“foo”,“bar\\\”]);JSON.parse(str);
即使
str
似乎包含
'[“foo”,“bar\\”]“
string literal中需要四个反斜杠,而不是八个。OP在解析后寻找的结果是第二项为“bar\”的数组。谢谢你nnnn,我认为Web编辑器需要另一个级别的转义。我更正了答案。这为什么会被否决?显示的代码可以工作(虽然说“需要”双重转义然后显示不这样做的代码有点让人困惑)。
JSON.parse('["foo", "bar\\\\"]');