関数・クラス解説

json_last_error

version:PHP 5 >= 5.3.0, PHP 7 (公式)

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

公式リファレンス

書式

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() の例

// 正しい 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() の組み合わせ

// 無効な 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 の組み合わせ

// 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 形式にして返す
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール