javascript - 无法从文件中获取 json_decode() - 语法错误

标签 javascript php json syntax

我被这个问题困住了。这是我的代码:

<?php 

$arr = [
'from_name' => 'Rosresurs1.ru',
'from_email' => 'team@rosresurs.net',
'reply_email' => 'reply@rosresurs.net',
'subject' => 'Вас приветствует Росресурс!',
'reply_us' => 'Вопрос нам',
'charset' => 'UTF-8',
'headers' => ['List-Unsubscribe: <mailto:support@rosresurs.net?subject=Unsubscribe>, <http://rosresurs.net/escript/unsubscribe.php?token=$token>', 'Precedence: bulk']
];

echo 'Var dump array to encode: <br>';
var_dump($arr);

//Encoding

$done = json_encode($arr, JSON_UNESCAPED_UNICODE);

echo 'Echo encoded array to json: <br><br>';
echo $done . "<br><br><br><br>";

//Decoding

echo "Starting decoding from file: <br><br>";

$var =  json_decode('mailconfig.json', true);
$json_errors = array(
    JSON_ERROR_NONE => 'No error has occurred',
    JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
    JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
    JSON_ERROR_SYNTAX => 'Syntax error',
);
 echo 'Last JSON error found: ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL . '<br><br>';

echo 'Var dump variable: <br>';
var_dump($var);

这是输出:

enter image description here

这是 JSON 文件,我试图从中解码 json:

{"from_name":"Rosresurs1.ru","from_email":"team@rosresurs.net","reply_email":"reply@rosresurs.net","subject":"Вас приветствует Росресурс!","reply_us":"Вопрос нам","charset":"UTF-8","headers":["List-Unsubscribe: , ","Precedence: bulk"]}

如您所见,我的数组包含 UTF-8 符号,因此我使用 JSON_UNESCAPED_UNICODE 选项对它们进行了编码。但是当我尝试解码(从文件)时,它失败了。但是当我尝试从编码变量 $done 解码时,它工作得很好。

我的 json 文件包含相同的 $done 输出(从浏览器复制并粘贴到文件)。 json_last_error 表示这是一个语法错误。但是没有人...

另外,我将文件中的 json 字符串粘贴到在线 json 语法验证服务,它返回“一个有效的 JSON 字符串”。

附言我做了很多 echo helpers(见截图),所以你可以快速解决问题(比如开始编码和解码点)。

最佳答案

根据文档,json_decode()不将文件名作为参数,仅将字符串作为参数。

如果你想从文件中解码 JSON,你需要做这样的事情:

$var = file_get_contents('mailconfig.json');
$var = json_decode($var);

或者,如果您必须经常这样做,您可以将整个事情包装在一个函数中:

function file_json_decode($path, $assoc = false){
    if(file_exists($path)){
        $json = file_get_contents($path);
        $result = json_decode($json, $assoc);
    } else {
        $result = null;
    }
    return $result
}

然后这样调用它:

$var = file_json_decode('mailconfig.json', true);

关于javascript - 无法从文件中获取 json_decode() - 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45722460/

相关文章:

Javascript:用于编写游戏风格技能 TreeMap 的简单库

php - 从页面中删除但不从 mysql 数据库中删除的行 (PHP/jQuery)

jquery - 从 for 循环中检索值并将它们动态添加到数组中的 JSON

c# - 检查字符串是否出现在 JValues 列表中

javascript - 我如何解码一个 javascript 片段,该片段被似乎是带有 eval() 函数的 unicode 或 regex 字符串混淆?

javascript - 多个元素上的 jQuery 动画,单个动画线程/计时器还是多个?

javascript - 谷歌地图为每个标记添加多个标记和信息窗口?

php - Facebook 自动发布链接在手机上以 map 形式打开

php - 文件上传/移动温度在 nginx 上不起作用

json - Sublime Text 3 中 1 个热键下带有 args 的多个命令