Contents
json_encode,json_decodeのエラーを検出する
json_decodeはjsonでエンコードされたデータを、適切な PHP の型として返します。
true、false および null はそれぞれ TRUE、FALSE そして NULL として返されます
json のデコードに失敗したりエンコードされたデータが再帰制限を超えているなどの場合、NULLを返します。
すなわち、json_decodeの結果が NULL であった場合、JSONの”null”を正しく変換してNULLなのか、変換に失敗してNULLなのかは解らない。
(ただし、正しい処理の中でNULLという変換結果がありえない場合は無視できる)
$text = "null"; // NULLに変換されるべき文字列
$data1 = json_decode($text);
var_dump($data1); // NULL
$text = '['; // JSONとして妥当ではない文字列
$data2 = json_decode($text); // NULL
エラー無しで変換できたかを確認するには json_last_error を使う。
json_last_errorは直近の JSON エンコード/デコード処理中に発生したエラー (もし存在すれば) を返す関数である。
// json_encode,json_decodeでエラーが発生していないか確認
if(json_last_error() !== JSON_ERROR_NONE){
// エラーが発生
}
else{
// エラー無し
}
変換元のデータにNANやINF、再帰参照が含まれている場合などjson_encodeも失敗するがことがあり得る。
json_encodeのエラーも同じくjson_last_errorで取得できる。
json_last_errorのエラーコード
json_last_errorは整数の値を返す。その値は次の定数のいずれかとなる。
エラーメッセージを取得する
直近の json_encode() や json_decode() の呼び出しのエラー文字列を返す関数はjson_last_error_msgである。
if(json_last_error() !== JSON_ERROR_NONE){
// エラーが発生
print json_last_error_msg(); // エラーメッセージを出力
}