【PHP8.x】json_last_error関数の使い方

作成日: 更新日:

json_last_error関数は、直近のJSONエンコードまたはデコード操作で発生したエラーコードを取得する関数です。JSON関連の処理(json_encodejson_decodeなど)を実行した後、この関数を呼び出すことで、エラーが発生したかどうか、そしてどのようなエラーが発生したのかを確認できます。エラーコードは整数値で表現され、JSON_ERROR_* という形式の定義済み定数と対応しています。例えば、JSON_ERROR_NONE はエラーが発生しなかったことを示し、JSON_ERROR_SYNTAX は構文エラーが発生したことを示します。

この関数は引数を必要としません。戻り値は整数値で、直近のJSON処理で発生したエラーコードです。もしエラーが発生していなければ JSON_ERROR_NONE が返されます。システムエンジニアを目指す初心者の方は、JSONデータを扱う際に、この関数を利用してエラーハンドリングを行うことを推奨します。JSONのエンコードやデコードがうまくいかない場合、json_last_error関数でエラーコードを確認し、そのエラーコードに対応する原因を調査することで、問題を解決することができます。例えば、JSON形式が正しくない場合に JSON_ERROR_SYNTAX が返されるので、JSONデータを見直すきっかけになります。このように、json_last_error関数は、JSON処理におけるデバッグ作業を効率的に行うための重要なツールとなります。

基本的な使い方

構文(syntax)

json_last_error(): int

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

直近の json_encode() または json_decode() 関数実行時のエラーコードを整数で返します。エラーが発生していない場合は JSON_ERROR_NONE (値は 0) が返されます。

サンプルコード

json_last_errorでJSONエラーコードを取得する

<?php

// JSON エンコード/デコード処理で発生した最後のエラーコードを取得するサンプル
$json_string = '{ "name": "John", "age": 30, "city": "New York" }';

// JSON 文字列をデコード
$data = json_decode($json_string);

// エラーが発生した場合
if (json_last_error() !== JSON_ERROR_NONE) {
    // エラーコードを取得
    $error_code = json_last_error();

    // エラーメッセージを取得 (PHP 5.5 以降)
    $error_message = json_last_error_msg();

    echo "JSON デコードエラーが発生しました。\n";
    echo "エラーコード: " . $error_code . "\n";
    echo "エラーメッセージ: " . $error_message . "\n";
} else {
    echo "JSON デコード成功!\n";
    print_r($data);
}

// 無効なJSON文字列をデコードしてみる
$invalid_json_string = "{ 'name': 'John' }"; // シングルクォートはJSONとして無効

$invalid_data = json_decode($invalid_json_string);

if (json_last_error() !== JSON_ERROR_NONE) {
    $error_code = json_last_error();
    $error_message = json_last_error_msg();

    echo "\n無効なJSON文字列のデコードエラーが発生しました。\n";
    echo "エラーコード: " . $error_code . "\n";
    echo "エラーメッセージ: " . $error_message . "\n";
}

?>

PHP 8.4 の json_last_error() 関数は、直近の JSON エンコードまたはデコード処理で発生したエラーコードを整数値で返します。引数は不要で、エラーが発生しなかった場合は JSON_ERROR_NONE を返します。

このサンプルコードでは、まず有効な JSON 文字列を json_decode() 関数でデコードしています。json_last_error() 関数を使って、デコード処理でエラーが発生したかどうかを確認します。もしエラーが発生した場合は、エラーコードとエラーメッセージ(PHP 5.5 以降で使用可能な json_last_error_msg() 関数を使用)を表示します。エラーが発生しなかった場合は、デコードされたデータを print_r() 関数で表示します。

次に、無効な JSON 文字列(シングルクォートを使用)をデコードする例を示しています。意図的にエラーを発生させ、json_last_error() 関数がエラーコードを正しく返すことを確認します。この例では、JSON の構文規則に違反しているため、エラーが発生し、対応するエラーコードとメッセージが表示されます。

json_last_error() 関数を使用することで、JSON データの処理におけるエラーを検出し、適切なエラーハンドリングを行うことができます。システムエンジニアを目指す上で、データの整合性を保つために重要な関数です。

json_last_error()関数は、直近のjson_encode()またはjson_decode()で発生したエラーコードを返します。エラーが発生しなかった場合はJSON_ERROR_NONEが返されます。

JSONのデコード処理後には、必ずjson_last_error()でエラーの有無を確認することが重要です。エラーが発生した場合、json_last_error_msg()(PHP 5.5以降)で詳細なエラーメッセージを取得できます。サンプルコードでは、エラー発生時の処理を適切に行い、エラーコードとメッセージを表示しています。

JSON文字列の形式には注意が必要です。特に、キーと文字列の値はダブルクォートで囲む必要があります。シングルクォートはJSONとして無効です。また、JSONの構文エラーが発生しやすいので、エラーハンドリングを確実に行うようにしましょう。

PHPでJSONエラーコードとメッセージを取得する

<?php

declare(strict_types=1);

/**
 * JSON文字列をデコードし、エラーが発生した場合にエラーコードとメッセージを表示します。
 *
 * @param string $jsonString デコード対象のJSON文字列
 */
function checkJsonError(string $jsonString): void
{
    echo "--- デコード試行: \"{$jsonString}\" ---" . PHP_EOL;

    // JSON文字列をPHPのオブジェクトにデコード
    $decodedData = json_decode($jsonString);

    // json_last_error() は、最後に発生したJSONエラーのコード(int)を返します。
    // エラーがなければ JSON_ERROR_NONE (値は 0) を返します。
    $errorCode = json_last_error();

    if ($errorCode !== JSON_ERROR_NONE) {
        // json_last_error_msg() は、最後のエラーに対応する人間が読める
        // 文字列メッセージ(string)を返します。
        $errorMessage = json_last_error_msg();

        echo "デコード失敗" . PHP_EOL;
        echo "エラーコード: {$errorCode}" . PHP_EOL;
        echo "エラーメッセージ: {$errorMessage}" . PHP_EOL;
    } else {
        echo "デコード成功" . PHP_EOL;
        print_r($decodedData);
    }
    echo PHP_EOL;
}

// わざと構文エラー(末尾にカンマ)を発生させる不正なJSON文字列
$invalidJson = '{"name": "Taro", "age": 30,}';
checkJsonError($invalidJson);

// 正しいJSON文字列
$validJson = '{"name": "Hanako", "age": 25}';
checkJsonError($validJson);

PHPのjson_last_error関数は、直前に行われたJSON関連の処理でエラーが発生したかどうかを確認するために使用されます。この関数は引数を一つも取りません。戻り値は整数(int)で、エラーの種類を示すコードを返します。もしエラーが発生していなければ、JSON_ERROR_NONEという定数(値は0)が戻り値として返されます。

サンプルコードでは、json_decode関数でJSON文字列をデコードした後に、json_last_error関数を使ってエラーコードを取得しています。取得したエラーコードがJSON_ERROR_NONEでない場合、エラーが発生したと判断し、さらにjson_last_error_msg関数を用いて人間が読めるエラーメッセージを取得・表示しています。これにより、不正なJSON形式の文字列が入力された際に、何が問題だったのかを具体的に把握し、適切なエラーハンドリングを行うことができます。正しいJSON文字列であれば、デコードは成功し、結果が表示されます。このように、JSONデータを扱う際には、エラーチェックを組み込むことが重要です。

json_last_error()json_last_error_msg()は、json_decode()などのJSON関連関数が最後に発生させたエラーに関する情報を取得するために使用します。これらの関数は、JSON処理後に必ず呼び出してエラーがないか確認することが重要です。エラーチェックを怠ると、予期せぬ動作やデータ破損の原因となります。特に、外部からのJSONデータを受け取る場合は、必ずエラーハンドリングを行いましょう。json_last_error()はエラーコードを数値で返し、json_last_error_msg()は人間が読めるエラーメッセージを返します。エラーコードはJSON_ERROR_NONEと比較することで、エラーの有無を判定できます。

【PHP8.x】json_last_error関数の使い方 | いっしー@Webエンジニア