Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】JsonException::getCode()メソッドの使い方

getCodeメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getCodeメソッドは、スローされたJsonExceptionオブジェクトから例外コードを取得するメソッドです。このメソッドは、PHPの基本的な例外クラスであるExceptionクラスから継承されたものです。JsonExceptionは、json_encode()関数やjson_decode()関数でJSON_THROW_ON_ERRORフラグが指定されている際に、JSONデータの処理中にエラーが発生するとスローされます。getCodeメソッドを呼び出すと、発生したエラーの種類を特定するための整数値が返されます。この返される値は、json_last_error()関数が返すエラーコード定数と一致しており、例えばJSONの構文エラーを示すJSON_ERROR_SYNTAXなどの定義済み定数と比較することが可能です。try-catchブロック内でこのメソッドを使用し、取得したエラーコードに応じて処理を分岐させることで、発生したJSONエラーの具体的な原因を判別し、それに応じた堅牢なエラーハンドリングを実装できます。

構文(syntax)

1<?php
2
3$invalidJson = '{ "key": "value", }'; // 不正なJSON文字列
4
5try {
6    json_decode($invalidJson, flags: JSON_THROW_ON_ERROR);
7} catch (JsonException $e) {
8    // 例外のエラーコードを取得します
9    $errorCode = $e->getCode();
10    
11    // JSON_ERROR_SYNTAX の値である 4 が出力されます
12    echo $errorCode;
13}

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

JsonException クラスの getCode メソッドは、JSON エンコードまたはデコード中に発生したエラーコードを整数型(int)で返します。

サンプルコード

JsonException::getCode()でエラーコードを取得する

1<?php
2
3/**
4 * json_decodeで発生したJsonExceptionからエラーコードを取得するサンプル関数
5 *
6 * わざと不正な形式のJSON文字列をデコードし、例外を発生させます。
7 * catchブロックでJsonExceptionオブジェクトを受け取り、
8 * getCode()メソッドを使ってエラーコード(整数)を取得・表示します。
9 */
10function getJsonErrorCodeExample(): void
11{
12    // 不正なJSON文字列(末尾に余分なカンマがあるため、構文エラーとなる)
13    $invalidJson = '{"name": "Taro", "age": 30,}';
14
15    try {
16        // JSON_THROW_ON_ERRORフラグを指定することで、
17        // デコードエラー時にJsonExceptionがスローされるようになります。
18        json_decode($invalidJson, true, 512, JSON_THROW_ON_ERROR);
19
20        echo "JSONのデコードに成功しました。" . PHP_EOL;
21    } catch (JsonException $e) {
22        // JsonExceptionをキャッチします。
23        echo "JSONのデコード中にエラーが発生しました。" . PHP_EOL;
24
25        // getCode()メソッドで例外のエラーコードを取得します。
26        // このコードはjson_last_error()が返す定数値(例: JSON_ERROR_SYNTAXは4)に対応します。
27        $errorCode = $e->getCode();
28        echo "エラーコード: " . $errorCode . PHP_EOL;
29
30        // 参考: getMessage()でエラーメッセージも取得できます。
31        $errorMessage = $e->getMessage();
32        echo "エラーメッセージ: " . $errorMessage . PHP_EOL;
33    }
34}
35
36// 関数を実行して結果を確認します。
37getJsonErrorCodeExample();
38

JsonException::getCode()は、JSONのエンコードまたはデコード処理でエラーが発生した際に、そのエラーの種類を特定するための整数コードを取得するメソッドです。このメソッドは引数を必要とせず、戻り値としてエラーの種類を示す整数 (int) を返します。この整数コードは、json_last_error()関数が返すPHPの定義済み定数(例: JSON_ERROR_SYNTAX4)に対応しています。

サンプルコードでは、末尾に不要なカンマが含まれる不正なJSON文字列をjson_decode()関数でデコードしようとしています。このとき、第4引数にJSON_THROW_ON_ERRORオプションが指定されているため、デコードに失敗するとJsonExceptionという例外が発生します。

プログラムはtry...catch構文でこの例外を捕捉し、catchブロック内で$e->getCode()を呼び出します。これにより、発生した例外オブジェクトから具体的なエラーコードを取得できます。この例では構文エラーが発生しているため、4という整数値が取得され、画面に出力されます。このように、getCode()を使用することで、エラーの種類に応じてプログラムの処理を分岐させるといったエラーハンドリングが可能になります。

json_decode関数でJsonExceptionからエラーコードを取得するには、第4引数にJSON_THROW_ON_ERRORを指定することが必須です。この指定がないと例外は発生せず、try-catch構文でエラーを捕捉できません。getCode()で得られる整数値は、json_last_error()が返すエラー定数(例:構文エラーを示すJSON_ERROR_SYNTAXなど)と同じです。この数値だけではエラー内容が分かりにくいため、getMessage()で取得できるエラーメッセージと合わせて確認すると、デバッグが容易になります。この機能はPHP 7.3以降で利用できます。

PHP JsonException::getCode() でエラーコードを取得する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * JsonException::getCode() の使用例を示します。
7 *
8 * 不正なJSON文字列をデコードしようとすると JsonException がスローされます。
9 * catchブロック内で、getCode() メソッドを呼び出して、
10 * json_last_error() が返すエラーコードと同じ値を取得できます。
11 */
12function demonstrateJsonExceptionGetCode(): void
13{
14    // わざと末尾にカンマを追加した、不正な形式のJSON文字列
15    $invalidJsonString = '{"product_id": 12345, "quantity": 1,}';
16
17    try {
18        // JSON_THROW_ON_ERROR フラグを指定すると、デコードエラー時に例外がスローされる
19        json_decode($invalidJsonString, flags: JSON_THROW_ON_ERROR);
20
21        echo 'JSONのデコードに成功しました。' . PHP_EOL;
22    } catch (JsonException $e) {
23        // スローされた JsonException をキャッチ
24        echo 'JSONのデコード中にエラーが発生しました。' . PHP_EOL;
25
26        // getCode() メソッドでエラーコードを取得
27        $errorCode = $e->getCode();
28        echo 'エラーコード: ' . $errorCode . PHP_EOL;
29
30        // getMessage() メソッドでエラーメッセージを取得
31        echo 'エラーメッセージ: ' . $e->getMessage() . PHP_EOL;
32
33        // 取得したエラーコードを、定義済みのJSONエラー定数と比較する
34        if ($errorCode === JSON_ERROR_SYNTAX) {
35            echo 'このエラーコードは構文エラー (JSON_ERROR_SYNTAX) を示しています。' . PHP_EOL;
36        }
37    }
38}
39
40// 関数を実行して動作を確認します
41demonstrateJsonExceptionGetCode();

JsonException::getCode() は、JSONのエンコードまたはデコード処理でエラーが発生した際に、そのエラーの種類を示すコードを取得するためのメソッドです。

このサンプルコードでは、まず json_decode() 関数に、わざと構文が間違っているJSON文字列を渡しています。このとき、flags 引数に JSON_THROW_ON_ERROR を指定しているため、デコードに失敗すると JsonException という種類の例外が発生(スロー)します。

プログラムは try...catch 構文を使い、エラーが発生する可能性のある処理を try ブロックで囲み、catch ブロックで発生した JsonException を捕捉しています。

catch ブロック内では、捕捉した例外オブジェクト $e に対して getCode() メソッドを呼び出しています。このメソッドは引数を取らず、エラーの原因を示す整数 (int) 型のコードを返します。この返される値は、PHPの json_last_error() 関数が返すエラーコードと同じものです。

最後に、取得したエラーコードをPHPの定義済み定数である JSON_ERROR_SYNTAX と比較することで、エラーが構文エラーであることを特定しています。このように、エラーコードを取得することで、プログラムはエラーの具体的な原因に応じた処理を行えるようになります。

JsonException::getCode()は、json_decode()関数でエラーが発生した際に、その原因を示すエラーコードを取得するためのメソッドです。この機能を利用するには、json_decode()の引数でJSON_THROW_ON_ERRORフラグを必ず指定する必要があります。この指定がないと例外は発生せず、getCode()も使えないため注意してください。取得したエラーコードは、JSON_ERROR_SYNTAXのようなPHPの定義済み定数と比較することで、エラーの種類を特定できます。エラーコードを直接数値で扱うのではなく、定数と比較することで、コードの可読性と保守性が向上します。getMessage()と併用すると、デバッグがより効率的になります。

関連コンテンツ