2017-08-16 14 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"]} 

あなた私の配列にはUTF-8シンボルが含まれているので、JSON_UNESCAPED_UNICODEオプションを使ってエンコードしました。しかし、(FIOMから)デコードしようとすると失敗します。しかし、コード化された変数$ doneからデコードしようとすると、完全に動作します。

私のjsonファイルには、同じ$ done出力(ブラウザからコピーしてファイルに貼り付け)が含まれています。 json_last_errorは構文エラーだと言っています。しかし、誰もいません...

また、jsonの文字列をファイルからオンラインjson構文検証サービスに貼り付け、「有効なJSON文字列」を返しました。

P.S.私はエコーヘルパーをたくさん作りました(スクリーンショットを参照)ので、問題を早く(エンコードポイントとデコードポイントの開始など)得ることができます。

答えて

2

を書き込むことができ、json_decode()は、パラメータとして文字列のみをファイル名を取ることはありません。あなたはこのロットをしなければならない場合は、関数の中で全体を包むことができ、

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

をまたは:あなたはファイルからJSONをデコードする場合

あなたはこのような何かをする必要があります:その後、

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); 
関連する問題