PHPにおけるJSON解析時のパーサーエラー
関数json_last_errorを使用すると、
JSONのパース中に具体的にどのエラーが
発生したかを知ることができます。
どのように行うか見てみましょう。
不正なJSONがあるとします:
<?php
$json = '["a", "b", "c",]';
?>
これを解析してみましょう:
<?php
$data = json_decode($json);
var_dump($data); // nullを出力します
?>
エラーが発生したため、json_last_errorを
呼び出すとそのエラー番号が返されます:
<?php
$error = json_last_error();
var_dump($error); // エラー番号
?>
返される番号は、PHPの特別な定数と 比較することができます。 これに基づいて、さまざまなタイプのエラーを キャッチするコードを書くことができます:
<?php
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo 'エラーはありません';
break;
case JSON_ERROR_DEPTH:
echo 'スタックの最大深度に達しました';
break;
case JSON_ERROR_STATE_MISMATCH:
echo '不正なビットまたはモードの不一致';
break;
case JSON_ERROR_CTRL_CHAR:
echo '不正な制御文字';
break;
case JSON_ERROR_SYNTAX:
echo '構文エラー、不正なJSON';
break;
case JSON_ERROR_UTF8:
echo '不正なUTF-8文字、おそらくエンコードが不正です';
break;
default:
echo '不明なエラー';
break;
}
?>
あるJSON文字列が与えられます。 これをPHPのデータ構造に解析してください。 解析結果、またはJSONを解析できなかった場合は その理由を出力してください。