为什么JSON.parse
无法解析以下JSON?
{"page_title":"contact us","val":{"pattern":"/email/\s+us\s*(.*?)/\s/","type":"1"}}
当我将result
登录到控制台时,它将给出以上输出。使用JSON.parse
后,会出现此错误:
未捕获到的SyntaxError:JSON中的意外令牌s在JSON.parse()处的位置1649 参见下面的代码:
var result ='<?php echo json_encode($output);?>';
console.log(result);
var data = JSON.parse(result);
答案 0 :(得分:1)
简单...不要单引号包装您的json对象或调用JSON.parse()
。
let result = <?php echo json_encode($output); ?>;
现在result
是一个可以使用的JavaScript对象。
如果您json_encode()
正确,则您的字符串将如下所示:
代码:(Demo)
$array = [
"page_title" => "contact us",
"val" => [
"pattern" => "/email/\s+us\s*(.*?)/\s/",
"type" => "1"
]
];
echo json_encode($array);
输出:
{"page_title":"contact us","val":{"pattern":"\/email\/\\s+us\\s*(.*?)\/\\s\/","type":"1"}}
p.s。您的regex模式看起来很可疑,尽管在电子邮件之后和捕获组之后,这些模式都带有未转义的斜杠,尽管该模式具有斜杠作为分隔符。
如果此模式用于js执行,那么您可能会获得更好的成功:
email\/\s+us\s*(.*?)\/\s
没有除斜符,因此您的模式可以由正则表达式函数用作变量。
如果我的上述逻辑没有大声尖叫,则这是一个JavaScript演示,它显示json_encode()
不需要addslashes()
:
下面的data
变量将由以下内容填充:
data = <?php echo json_encode([
"page_title" => "contact us",
"val" => [
"pattern" => "email\/\s+us\s*(.*?)\/\s",
"type" => "1"
]
]); ?>;
let data = {"page_title":"contact us","val":{"pattern":"email\\\/\\s+us\\s*(.*?)\\\/\\s","type":"1"}},
str = "You can email/ us all-day-long if you wish/ or not.";
console.log(data.page_title);
console.log(data.val.pattern);
regex = new RegExp(data.val.pattern,"g");
console.log(str.match(regex));
console.log(data.val.type);
答案 1 :(得分:0)
使用addslashes函数,因为您在字符串中使用了正则表达式
var result ='<?php echo addslashes(json_encode($output));?>';