PHP JSON解析器v.s.Javascript JSON解析器
我有一个通过PHP serialize的json_编码的数组:PHP JSON解析器v.s.Javascript JSON解析器,php,javascript,json,Php,Javascript,Json,我有一个通过PHP serialize的json_编码的数组: json_encode(array('pattern' => '^(?:/?site/(?[\w\-]+))?(?:/?intl/(?[a-z]{2}(?:\-[a-z]{2})?)/?)?(/?(?.*))')); // output json: {"pattern":"^(?:\/?site\/(?[\\w\\-]+))?(?:\/?intl\/(?[a-z]{2}(?:\\-[a-z]{2})?)\/?)?(\/?(?.
json_encode(array('pattern' => '^(?:/?site/(?[\w\-]+))?(?:/?intl/(?[a-z]{2}(?:\-[a-z]{2})?)/?)?(/?(?.*))'));
// output json: {"pattern":"^(?:\/?site\/(?[\\w\\-]+))?(?:\/?intl\/(?[a-z]{2}(?:\\-[a-z]{2})?)\/?)?(\/?(?.*))"}
我尝试用Javascript解码:
JSON.parse('{"pattern":"^(?:\/?site\/(?[\\w\\-]+))?(?:\/?intl\/(?[a-z]{2}(?:\\-[a-z]{2})?)\/?)?(\/?(?.*))"}');
然后我不明白为什么会出现错误“uncaughtsyntaxerror:unexpectedtokenw”??
PHP和Javascript JSON解析器有区别吗 问题是因为您使用的是JSON.parse()并将JSON字符串括在单引号中 因此,转义的正则表达式字符串在解释外部字符串文字(单引号)时被取消转义,然后在解释字符串<代码>模式代码>(双引号)的值时被混淆,最终导致JavaScript在试图破译“\w”时受阻 下面的示例模仿PHP将JSON逐字呈现到声明中,在JS控制台中工作良好:
var json = {"pattern":"^(?:\/?site\/(?[\\w\\-]+))?(?:\/?intl\/(?[a-z]{2}(?:\\-[a-z]{2})?)\/?)?(\/?(?.*))"}
如果要使用JSON.parse,必须首先在PHP中对JSON字符串进行双转义
$json = json_encode(array('pattern' => '^(?:/?site/(?[\w\-]+))?(?:/?intl/(?[a-z]{2}(?:\-[a-z]{2})?)/?)?(/?(?.*))'));
$json = str_replace('\', '\\', $json);
// output json: {"pattern":"^(?:\\/?site\\/(?[\\\\w\\\\-]+))?(?:\\/?intl\\/(?[a-z]{2}(?:\\\\-[a-z]{2})?)\\/?)?(\\/?(?.*))"}
然后,在JS中:
var json = JSON.parse('{"pattern":"^(?:\\/?site\\/(?[\\\\w\\\\-]+))?(?:\\/?intl\\/(?[a-z]{2}(?:\\\\-[a-z]{2})?)\\/?)?(\\/?(?.*))"}')
需要注意的是,这是必要的,因为他将JSON作为文本输入JS程序。如果JSON通过网络传递并由JS以这种方式处理,则不需要这样做。