2017-08-16 31 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);