我有以下JSON字符串,用PHP 5.2 json_encode()编码:
{"foo":"\\."}
此JSON字符串有效。您可以在http://www.jsonlint.com/
查看但原生JSON.parse()方法(Chrome,Firefox)在解析时会抛出以下错误:
SyntaxError: Unexpected token ILLEGAL
你们有没有人知道,为什么我不能解析逃脱的正则表达式元字符?
此示例有效:
{"foo":"\\bar"}
但是这个也失败了:
{"foo":"\\?"}
BTW:\.
只是一个简单的测试正则表达式,我想通过javascript的RegExp对象运行。
感谢您的支持,
Dyvor
答案 0 :(得分:9)
它“无法正常工作”,因为您错过了一个关键点:当您在Chrome控制台中键入以下行时,两个字符串解析正在进行:
JSON.parse('{"foo": "\\."}');
当JavaScript解释器解析您传入“parse()”方法的字符串常量时,会发生第一个字符串解析。 第二个字符串解析发生在JSON解析器本身内部。在第一次传递之后,双反斜杠只是一个反斜杠。
这一个:
{"foo":"\\bar"}
有效,因为“\ b”是一个有效的字符串内转义序列。
答案 1 :(得分:1)
它适用于我在firebug控制台中。
>>> JSON.parse('"\\\\."');
"\."
这是正确的,因为json解析器实际上接收"\\."
,即一个esacped反斜杠和一个点。
来自PHP的响应是否真的发生了问题?或者只是在“手动”测试中?
答案 2 :(得分:0)
添加一组额外的\\,为什么它有效我不太确定。
JSON.parse('{"foo":"\\\\."}');