関数の概要
json_last_error は、直前に実行した JSON エンコードやデコード関数(json_encode、json_decode)で発生したエラーの種類を取得するための関数です。JSON処理時のエラーを確認したい場合に利用します。
パラメータの説明
- この関数はパラメータを取りません。
戻り値
直前に発生した JSON エラーを示す整数値を返します。エラーがなければ JSON_ERROR_NONE(0)を返します。その他の値はエラーの種類ごとに定義されています。
使用例
基本的な使い方
<?php
$data = '{"name":"Taro","age":25}';
$result = json_decode($data);
if (json_last_error() === JSON_ERROR_NONE) {
echo 'JSON の解析に成功しました。';
} else {
echo 'JSON エラー: ' . json_last_error();
}
?>
正しい JSON データをデコードし、エラーが発生していないかを確認しています。
無効なJSON文字列のチェック
<?php
$data = '{"name":"Taro", "age":25'; // 閉じ括弧が不足している
$result = json_decode($data);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSON エラーが発生しました: ' . json_last_error();
} else {
echo 'JSON の解析に成功しました。';
}
?>
不正な JSON 文字列をデコードしようとした場合、適切にエラーを検出できます。
エラーコードを文字列で表示する例
<?php
function getJsonErrorMessage() {
switch(json_last_error()) {
case JSON_ERROR_NONE:
return 'エラーなし';
case JSON_ERROR_DEPTH:
return 'スタックの深さの最大を超えました';
case JSON_ERROR_STATE_MISMATCH:
return '無効または不整合なJSON';
case JSON_ERROR_CTRL_CHAR:
return '制御文字エラー';
case JSON_ERROR_SYNTAX:
return '構文エラー';
case JSON_ERROR_UTF8:
return '不正なUTF-8文字列';
default:
return '不明なエラー';
}
}
$data = '{"name":"Taro", "age":}';
json_decode($data);
echo 'JSON エラー詳細: ' . getJsonErrorMessage();
?>
返されたエラーコードを見やすい日本語メッセージに変換して表示しています。
関連する関数
json_encode:PHPの値をJSON形式の文字列に変換します。json_decode:JSON文字列をPHPの値に変換します。json_last_error_msg:直近のJSONエラーに対するエラーメッセージを文字列で取得します。
まとめ
json_last_error は JSON 処理時のエラーコードを取得できる便利な関数です。特に json_decode で不正な JSON データが与えられた際の原因解析に活用します。エラー発生時はコードだけでなく json_last_error_msg と組み合わせて使うことで、より分かりやすいエラーメッセージを取得できます。JSONの扱いで確実なエラーチェックを行いたい実務にも役立つ基本的な関数です。
