1

为什么下面的 JSON 解析失败JSON.parse

{"page_title":"contact us","val":{"pattern":"/email/\s+us\s*(.*?)/\s/","type":"1"}}

当我登录result到控制台时,它会给出上述输出。使用后JSON.parse出现此错误:

Uncaught SyntaxError: Unexpected token s in JSON at 1649 at JSON.parse () 请看下面我的代码:

var result ='<?php echo json_encode($output);?>';
console.log(result);
var data = JSON.parse(result);
4

2 回答 2

1

简单...不要用单引号包裹您的 json 对象,也不要调用JSON.parse().

let result = <?php echo json_encode($output); ?>;

现在result是一个可以使用的 javascript 对象。

如果你是json_encode()正确的,你的字符串将如下所示:

代码:(演示

$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"}}

ps 你的正则表达式模式看起来有问题,尽管模式有斜杠作为分隔符,但在电子邮件之后和捕获组之后的那些未转义的斜杠。

如果此模式适用于 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);

于 2020-02-20T10:34:41.787 回答
1

使用 addlashes 函数,因为您在字符串中使用正则表达式

var result ='<?php echo addslashes(json_encode($output));?>';
于 2020-02-20T12:35:12.247 回答