【发布时间】:2019-08-24 20:08:30
【问题描述】:
我有下面的 JSON 代码。根据one 或two JSON 验证器,它是有效的 JSON。
{
"patterns": {
"email": "/[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}/i",
"phone": "/(?:(?:\\(?(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?(?:\\(?0\\)?[\\s-]?)?)|(?:\\(?0))(?:(?:\\d{5}\\)?[\\s-]?\\d{4,5})|(?:\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3}))|(?:\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4})|(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}))(?:[\\s-]?(?:x|ext\\.?|\\#)\\d{3,4})?/"
}
}
但是,当我尝试在 PHP 中使用 json_decode 函数进行解码时,我得到一个“语法错误”。这是我的 PHP 代码:
const JSON_CONFIG = <<<JSON
{
"patterns": {
"email": "/[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}/i",
"phone": "/(?:(?:\\(?(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?(?:\\(?0\\)?[\\s-]?)?)|(?:\\(?0))(?:(?:\\d{5}\\)?[\\s-]?\\d{4,5})|(?:\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3}))|(?:\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4})|(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}))(?:[\\s-]?(?:x|ext\\.?|\\#)\\d{3,4})?/"
}
}
JSON;
$config = json_decode(mb_convert_encoding(JSON_CONFIG, "UTF-8"), true); // Tried called trim but it made no difference
echo 'json_last_error_msg() => ' . json_last_error_msg() . PHP_EOL;
print_r($config); // Doesn't get to run
自己试试吧:https://repl.it/@DanStevens/PHP-jsondecode-Syntax-Error
知道json_decode 不喜欢这个有效的 JSON 吗?是不是和HEREDOC的使用有关?
【问题讨论】: