json_last_error

関数の概要

json_last_error は、直前に実行した JSON エンコードやデコード関数(json_encodejson_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の扱いで確実なエラーチェックを行いたい実務にも役立つ基本的な関数です。