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

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

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)

1json_last_error(): int

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

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

サンプルコード

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

1<?php
2
3// JSON エンコード/デコード処理で発生した最後のエラーコードを取得するサンプル
4$json_string = '{ "name": "John", "age": 30, "city": "New York" }';
5
6// JSON 文字列をデコード
7$data = json_decode($json_string);
8
9// エラーが発生した場合
10if (json_last_error() !== JSON_ERROR_NONE) {
11    // エラーコードを取得
12    $error_code = json_last_error();
13
14    // エラーメッセージを取得 (PHP 5.5 以降)
15    $error_message = json_last_error_msg();
16
17    echo "JSON デコードエラーが発生しました。\n";
18    echo "エラーコード: " . $error_code . "\n";
19    echo "エラーメッセージ: " . $error_message . "\n";
20} else {
21    echo "JSON デコード成功!\n";
22    print_r($data);
23}
24
25// 無効なJSON文字列をデコードしてみる
26$invalid_json_string = "{ 'name': 'John' }"; // シングルクォートはJSONとして無効
27
28$invalid_data = json_decode($invalid_json_string);
29
30if (json_last_error() !== JSON_ERROR_NONE) {
31    $error_code = json_last_error();
32    $error_message = json_last_error_msg();
33
34    echo "\n無効なJSON文字列のデコードエラーが発生しました。\n";
35    echo "エラーコード: " . $error_code . "\n";
36    echo "エラーメッセージ: " . $error_message . "\n";
37}
38
39?>

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_last_error でJSON構文エラーを検出する

1<?php
2
3/**
4 * 不正なJSON文字列をデコードし、json_last_errorの動作を示す関数
5 *
6 * システムエンジニアを目指す初心者向けに、JSON構文エラーの検出方法を説明します。
7 * キーワード「5」は、JSON_ERROR_SYNTAX (構文エラー) を意味します。
8 */
9function demonstrateJsonLastError(): void
10{
11    // 不正なJSON文字列の例
12    // このJSONは最後の閉じ波括弧が欠けているため、構文エラーとなります。
13    $invalidJson = '{"name": "Alice", "age": 30, "city": "New York"';
14
15    echo "--- 不正なJSON文字列のデコードを試みます ---\n";
16    echo "対象JSON: " . $invalidJson . "\n\n";
17
18    // json_decodeは、不正なJSON文字列をデコードしようとすると通常は null を返します。
19    // エラーの詳細は json_last_error() で取得できます。
20    $data = json_decode($invalidJson);
21
22    // json_last_error() で最後のエラーコードを取得します。
23    $errorCode = json_last_error();
24
25    // エラーが発生したかを確認します。JSON_ERROR_NONE (0) はエラーがない状態です。
26    if ($errorCode !== JSON_ERROR_NONE) {
27        echo "JSONデコード中にエラーが発生しました。\n";
28        echo "エラーコード: " . $errorCode . "\n";
29
30        // エラーコードに応じてメッセージを表示します。
31        switch ($errorCode) {
32            case JSON_ERROR_DEPTH:
33                echo "エラーメッセージ: 最大のスタック深度を超過しました。\n";
34                break;
35            case JSON_ERROR_STATE_MISMATCH:
36                echo "エラーメッセージ: 構文解析中に状態が不一致になりました。\n";
37                break;
38            case JSON_ERROR_CTRL_CHAR:
39                echo "エラーメッセージ: 予期しない制御文字が見つかりました。\n";
40                break;
41            case JSON_ERROR_SYNTAX: // エラーコード 5
42                echo "エラーメッセージ: 構文エラー、不正なJSON形式です。\n";
43                echo "(このエラーコード '5' は JSON_ERROR_SYNTAX を意味します。)\n";
44                break;
45            case JSON_ERROR_UTF8:
46                echo "エラーメッセージ: 不正なUTF-8文字、おそらく不正なエンコーディングです。\n";
47                break;
48            default:
49                echo "エラーメッセージ: 未知のJSONエラーです。\n";
50                break;
51        }
52    } else {
53        echo "JSONは正常にデコードされました。\n";
54        echo "デコード結果:\n";
55        print_r($data);
56    }
57
58    echo "\n--- 正常なJSON文字列のデコードを試みます ---\n";
59    $validJson = '{"name": "Bob", "age": 25}';
60    echo "対象JSON: " . $validJson . "\n\n";
61
62    $data = json_decode($validJson);
63    $errorCode = json_last_error();
64
65    if ($errorCode !== JSON_ERROR_NONE) {
66        echo "JSONデコード中にエラーが発生しました (想定外)。エラーコード: " . $errorCode . "\n";
67    } else {
68        echo "JSONは正常にデコードされました。\n";
69        echo "デコード結果:\n";
70        print_r($data);
71    }
72}
73
74// 関数を実行して動作を確認します。
75demonstrateJsonLastError();

PHPのjson_last_error関数は、直前に実行されたJSON関連の操作(主にjson_decodejson_encodeなど)で発生したエラーの種類を示す整数値を取得するために使用されます。この関数は引数を取りません。

サンプルコードでは、閉じ波括弧が欠けている不正なJSON文字列をjson_decode関数でデコードしようとしています。json_decodeは、このような不正な文字列に対しては通常nullを返しますが、具体的なエラーの原因はjson_last_error()で確認できます。

不正なJSONをデコードした後にjson_last_error()を呼び出すと、「5」というエラーコードが返されます。この「5」はJSON_ERROR_SYNTAXという定数が表す「構文エラー」を意味し、JSONの形式が正しくないことを示しています。もしJSON処理が正常に完了しエラーがなければ、この関数はJSON_ERROR_NONEという定数に相当する「0」を返します。

システムエンジニアとしてJSONデータを扱う際には、json_last_error関数を使ってエラーの有無や種類を確認し、適切なエラー処理を行うことが重要です。これにより、予期せぬデータの破損やアプリケーションの停止を防ぎ、堅牢なシステムを構築することができます。

json_decode()関数がnullを返した場合でも、それが必ずしもエラーを意味するわけではありません。正確なエラーの有無や具体的な内容は、必ずその直後にjson_last_error()関数を呼び出し、戻り値のエラーコードを確認するようにしてください。この関数は直前のJSON関連操作のエラーコードを返すため、複数のJSON処理を行う場合は、それぞれの操作の直後にエラー確認を行うことが重要です。サンプルコードで示されたエラーコード「5」はJSON_ERROR_SYNTAX、つまりJSONの構文エラーを表します。このように具体的なエラーコードに基づいた適切なエラーハンドリングを実装することで、システムの安定性と問題解決の迅速性が向上します。また、エラーコードだけでなく、より詳細なエラーメッセージが必要な場合は、json_last_error_msg()関数を併用すると良いでしょう。

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

1<?php
2
3declare(strict_types=1);
4
5/**
6 * JSON文字列をデコードし、エラーが発生した場合にエラーコードとメッセージを表示します。
7 *
8 * @param string $jsonString デコード対象のJSON文字列
9 */
10function checkJsonError(string $jsonString): void
11{
12    echo "--- デコード試行: \"{$jsonString}\" ---" . PHP_EOL;
13
14    // JSON文字列をPHPのオブジェクトにデコード
15    $decodedData = json_decode($jsonString);
16
17    // json_last_error() は、最後に発生したJSONエラーのコード(int)を返します。
18    // エラーがなければ JSON_ERROR_NONE (値は 0) を返します。
19    $errorCode = json_last_error();
20
21    if ($errorCode !== JSON_ERROR_NONE) {
22        // json_last_error_msg() は、最後のエラーに対応する人間が読める
23        // 文字列メッセージ(string)を返します。
24        $errorMessage = json_last_error_msg();
25
26        echo "デコード失敗" . PHP_EOL;
27        echo "エラーコード: {$errorCode}" . PHP_EOL;
28        echo "エラーメッセージ: {$errorMessage}" . PHP_EOL;
29    } else {
30        echo "デコード成功" . PHP_EOL;
31        print_r($decodedData);
32    }
33    echo PHP_EOL;
34}
35
36// わざと構文エラー(末尾にカンマ)を発生させる不正なJSON文字列
37$invalidJson = '{"name": "Taro", "age": 30,}';
38checkJsonError($invalidJson);
39
40// 正しいJSON文字列
41$validJson = '{"name": "Hanako", "age": 25}';
42checkJsonError($validJson);
43

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と比較することで、エラーの有無を判定できます。

PHP json_last_error() でJSONエラーを確認する

1<?php
2
3/**
4 * JSON文字列のデコードを試み、その結果とエラー情報を表示する関数。
5 * システムエンジニアを目指す初心者向けに、json_last_error() の使い方を解説します。
6 *
7 * @param string $jsonString デコードを試みるJSON文字列。
8 * @return void
9 */
10function demonstrateJsonLastError(string $jsonString): void
11{
12    echo "--- JSONデコードのテスト ---\n";
13    echo "対象JSON文字列: " . $jsonString . "\n";
14
15    // JSON文字列をデコード
16    $decodedData = json_decode($jsonString);
17
18    // json_last_error() を使用して、最後のJSON操作のエラーコードを取得
19    $errorCode = json_last_error();
20
21    // エラーコードに基づいて結果を表示
22    if ($errorCode === JSON_ERROR_NONE) {
23        echo "デコード成功! エラーなし。\n";
24        echo "デコード結果: " . print_r($decodedData, true);
25    } else {
26        echo "デコード失敗! エラーが発生しました。\n";
27        echo "エラーコード (int): " . $errorCode . "\n";
28        // json_last_error_msg() を使用して、エラーコードに対応する人間が読めるメッセージを取得
29        echo "エラーメッセージ: " . json_last_error_msg() . "\n";
30    }
31    echo "\n";
32}
33
34// 正常なJSON文字列の例
35$validJson = '{"name": "Alice", "age": 30, "city": "New York"}';
36demonstrateJsonLastError($validJson);
37
38// 不正なJSON文字列の例 (クォーテーションが足りない)
39$invalidJson = '{"name": "Bob", "age": 25, "city": "London}';
40demonstrateJsonLastError($invalidJson);
41
42// 不正なJSON文字列の例 (カンマが不要な位置にある)
43$anotherInvalidJson = '{"item": "pen", "price": 10,, "quantity": 5}';
44demonstrateJsonLastError($anotherInvalidJson);
45
46?>

PHPのjson_last_error関数は、直前に行われたJSON関連の操作(例えば、json_decode関数でJSON文字列をPHPのデータに変換する処理など)が成功したか、あるいはどのようなエラーが発生したかを確認するために利用されます。この関数は引数を受け取らず、整数値(int)のエラーコードを戻り値として返します。

このエラーコードが0JSON_ERROR_NONEという定数に相当)であれば、直前のJSON操作はエラーなく正常に完了したことを意味します。それ以外の値が返された場合は、何らかのエラーが発生しており、そのエラーの種類を示すコードとなります。

サンプルコードでは、demonstrateJsonLastError関数がJSON文字列のデコードを試み、その直後にjson_last_errorを呼び出してエラーコードを取得しています。取得したコードが0かどうかで、デコードが成功したか失敗したかを判断し、結果を表示しています。不正なJSON文字列の例では、エラーコードが返されることを示し、さらにjson_last_error_msg関数を使って、そのエラーコードに対応する人間が読めるメッセージも取得・表示しています。このように、json_last_errorはJSON処理の信頼性を確保する上で重要な関数です。

json_last_error()関数は、json_decode()json_encode()などのJSON関連操作の直後に呼び出すことが非常に重要です。他の処理を挟むと、正確なエラーコードを取得できない可能性がありますのでご注意ください。この関数の戻り値がPHPの定数JSON_ERROR_NONEと一致する場合、直前のJSON操作は正常に完了しています。それ以外の数値が返された場合はエラーが発生しており、その種類を示しています。より具体的なエラー内容を人間が読めるメッセージで知るためには、json_last_error_msg()関数と併用すると良いでしょう。これにより、不正なJSONデータが原因でプログラムが意図しない動作をするのを防ぎ、問題の特定とデバッグが容易になります。

関連コンテンツ