json_last_error
(PHP 5 >= 5.3.0, PHP 7)
json_last_error — 直近に発生したエラーを返す
説明
json_last_error ( ) : int
JSON_THROW_ON_ERROR
を指定していなかった場合に、
直近の JSON エンコード/デコード処理中に発生したエラー (もし存在すれば) を返します。
パラメータ
この関数にはパラメータはありません。
返り値
整数値を返します。これは、次の定数のいずれかとなります。
定数 | 意味 | 使用可能 |
---|---|---|
JSON_ERROR_NONE
|
エラーは発生しませんでした | |
JSON_ERROR_DEPTH
|
スタックの深さの最大値を超えました | |
JSON_ERROR_STATE_MISMATCH
|
JSON の形式が無効、あるいは壊れています | |
JSON_ERROR_CTRL_CHAR
|
制御文字エラー。おそらくエンコーディングが違います | |
JSON_ERROR_SYNTAX
|
構文エラー | |
JSON_ERROR_UTF8
|
正しくエンコードされていないなど、不正な形式の UTF-8 文字 | PHP 5.3.3 |
JSON_ERROR_RECURSION
|
エンコード対象の値に再帰参照が含まれています | PHP 5.5.0 |
JSON_ERROR_INF_OR_NAN
|
エンコード対象の値に | PHP 5.5.0 |
JSON_ERROR_UNSUPPORTED_TYPE
|
エンコード不可能な型の値が渡されました | PHP 5.5.0 |
JSON_ERROR_INVALID_PROPERTY_NAME
|
エンコードできないプロパティ名が渡されました | PHP 7.0.0 |
JSON_ERROR_UTF16
|
おそらく正しくエンコードされていない、不正な UTF-16 文字 | PHP 7.0.0 |
例
例1 json_last_error() の例
<?php// 正しい json 文字列$json[] = '{"Organization": "PHP Documentation Team"}';// 間違った json 文字列で、構文エラーとなります// ここでは、クォートに " ではなく ' を使用しています$json[] = "{'Organization': 'PHP Documentation Team'}";foreach ($json as $string) { echo 'Decoding: ' . $string; json_decode($string); switch (json_last_error()) { case JSON_ERROR_NONE: echo ' - No errors'; break; case JSON_ERROR_DEPTH: echo ' - Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: echo ' - Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: echo ' - Unexpected control character found'; break; case JSON_ERROR_SYNTAX: echo ' - Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: echo ' - Unknown error'; break; } echo PHP_EOL;}?>
上の例の出力は以下となります。
Decoding: {"Organization": "PHP Documentation Team"} - No errors Decoding: {'Organization': 'PHP Documentation Team'} - Syntax error, malformed JSON
例2 json_last_error() と json_encode() の組み合わせ
<?php// 無効な UTF8 シーケンス$text = "\xB1\x31";$json = json_encode($text);$error = json_last_error();var_dump($json, $error === JSON_ERROR_UTF8);?>
上の例の出力は以下となります。
string(4) "null" bool(true)
例3 json_last_error() と JSON_THROW_ON_ERROR
の組み合わせ
<?php// JSON_ERROR_UTF8 が発生する、不正なUTF8シーケンスjson_encode("\xB1\x31");// 次の文字列は、JSON error が発生しないjson_encode('okay', JSON_THROW_ON_ERROR);// グローバルなエラー状態は、直前の json_encode() によって変更されないvar_dump(json_last_error() === JSON_ERROR_UTF8);?>
上の例の出力は以下となります。
bool(true)
参考
- json_last_error_msg() - 直近の json_encode() や json_decode() の呼び出しのエラー文字列を返す
- json_decode() - JSON 文字列をデコードする
- json_encode() - 値を JSON 形式にして返す