2017-08-16 146 views
1

我坚持这个问题。这里是我的代码:无法从文件json_decode() - 语法错误

<?php 
 

 
$arr = [ 
 
'from_name' => 'Rosresurs1.ru', 
 
'from_email' => '[email protected]', 
 
'reply_email' => '[email protected]', 
 
'subject' => 'Вас приветствует Росресурс!', 
 
'reply_us' => 'Вопрос нам', 
 
'charset' => 'UTF-8', 
 
'headers' => ['List-Unsubscribe: <mailto:[email protected]?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":"[email protected]","reply_email":"[email protected]","subject":"Вас приветствует Росресурс!","reply_us":"Вопрос нам","charset":"UTF-8","headers":["List-Unsubscribe: , ","Precedence: bulk"]} 

随着英语新ee我的数组包含UTF-8符号,所以我使用JSON_UNESCAPED_UNICODE选项对它们进行了编码。但是,当我尝试解码(从文件),它失败。但是当我尝试从编码变量$ done解码时,它完美地工作。

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

而且我粘贴JSON字符串从文件到网上JSON语法验证服务,它返回“一个有效的JSON字符串”。

P.S.我做了很多回声帮助程序(见截图),所以你可以快速解决问题(如开始编码和解码点)。

回答

2

根据该文档,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); 
+0

嗯。这很简单:)谢谢:) –

2

要调用一个错误的参数json_decode。第一个参数是JSON数据,而不是文件名!所以,如果你想分析该文件中的JSON,你可能会写

json_decode(file_get_contents('mailconfig.json'), true);