Php/docs/function.json-last-error

提供:Dev Guides
< Php
移動先:案内検索

json_last_error

(PHP 5 >= 5.3.0, PHP 7)

json_last_error直近に発生したエラーを返す


説明

json_last_error ( ) : int

JSON_THROW_ON_ERROR を指定していなかった場合に、 直近の JSON エンコード/デコード処理中に発生したエラー (もし存在すれば) を返します。


パラメータ

この関数にはパラメータはありません。


返り値

整数値を返します。これは、次の定数のいずれかとなります。

JSON error codes
定数 意味 使用可能
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 エンコード対象の値に

NAN あるいは INF が含まれています。

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)

参考