JSON.parse生成带有反斜杠的错误

时间:2020-02-20 10:09:49

标签: php jquery json

为什么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);

2 个答案:

答案 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));?>';