JSON .parse генерирует ошибку с обратной косой чертой - PullRequest
0 голосов
/ 20 февраля 2020

Почему следующее JSON не может быть проанализировано с помощью JSON.parse?

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

Когда я регистрирую result на консоли, это дает вышеуказанный вывод. После использования JSON.parse выдает эту ошибку:

Uncaught SyntaxError: Неожиданные токены в JSON в позиции 1649 в JSON .parse (), см. Мой код ниже:

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

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Простой ... не заключайте в кавычки 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 ваш шаблон регулярных выражений выглядит сомнительным с этими неэкранированными sla sh после электронной почты и после группы захвата, несмотря на то, что шаблон имеет косые черты в качестве разделителей.

Если это шаблон для выполнения js, вы можете добиться большего успеха с:

email\/\s+us\s*(.*?)\/\s

без разделителей, чтобы ваш шаблон мог использоваться функцией регулярного выражения в качестве переменной.

И если мой вышеупомянутый logi c недостаточно громко кричит, вот демо 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);
0 голосов
/ 20 февраля 2020

Используйте функцию addlashes, потому что вы используете регулярное выражение в строку

var result ='<?php echo addslashes(json_encode($output));?>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...