関数・クラス解説

json_decode

version:PHP 5 >= 5.2.0, PHP 7, PECL json (公式)

JSON 文字列をデコードする

公式リファレンス

書式

json_decode ( string $json [, bool $assoc = NULL [, int $depth = 512 [, int $options = 0 ]]] ) : mixed

説明

JSON エンコードされた文字列を受け取り、それを PHP の変数に変換します。

パラメータ

json
デコード対象となる json 文字列。 この関数は UTF-8 でエンコードされた文字列でのみ動作します。
注意: PHP の実装は、 » RFC 7159 の JSON のスーパーセットです。
assoc
TRUE の場合、返されるオブジェクトは連想配列形式になります。 FALSE の場合、返されるオブジェクトは object になります。 NULL の場合、返されるオブジェクトは options に JSON_OBJECT_AS_ARRAY が設定されているかどうかによって、 連想配列形式か object かが変化します。
depth
ユーザー指定の再帰の深さ。
options
JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR. からなるビットマスク。 各定数の意味については JSON 定数のページ に説明があります。

返値

json でエンコードされたデータを、適切な PHP の型として返します。 true、false および null はそれぞれ TRUE、FALSE そして NULL として返されます。 json のデコードに失敗したり エンコードされたデータが再帰制限を超えているなどの場合、NULL を返します。

注意

注意: JSON の仕様は JavaScript そのものではなく、JavaScript のサブセットです。
注意: デコードに失敗した場合は、json_last_error() を使用すればエラーの正確な状態を知ることができます。

更新履歴

バージョン 説明
7.3.0 options パラメータに JSON_THROW_ON_ERROR が追加されました。
7.2.0 assoc は nullable になりました。
7.2.0 options パラメータに JSON_INVALID_UTF8_IGNORE および JSON_INVALID_UTF8_SUBSTITUTE が追加されました。
7.1.0 空の JSONキー ("") は、 _empty_ というキーではなく、 空のオブジェクトプロパティにエンコードされるようになりました。

サンプル

例1 json_decode() の例

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true));

上の例の出力は以下となります。

object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }

例2 無効なオブジェクトプロパティへのアクセス

オブジェクトの中にある、 PHP の命名規約では使えない文字 (ハイフンなど) を含む要素にアクセスするには、 要素名を波括弧とアポストロフィで囲みます。

$json = '{"foo-bar": 12345}'; $obj = json_decode($json); print $obj->{'foo-bar'}; // 12345

例3 json_decode() でのありがちな間違い

// 以下の文字列は JavaScript としては有効ですが JSON としては無効です // 名前と値はダブルクォートで囲む必要があります。 // シングルクォートは使えません $bad_json = "{ 'bar': 'baz' }"; json_decode($bad_json); // null // 名前をダブルクォートで囲まなければなりません $bad_json = '{ bar: "baz" }'; json_decode($bad_json); // null // 最後にカンマをつけてはいけません $bad_json = '{ bar: "baz", }'; json_decode($bad_json); // null

例4 depth エラー

// データをエンコードします $json = json_encode(     array(         1 => array(             'English' => array(                 'One',                 'January'             ),             'French' => array(                 'Une',                 'Janvier'             )         )     ) ); // エラーを定義します $constants = get_defined_constants(true); $json_errors = array(); foreach ($constants["json"] as $name => $value) {     if (!strncmp($name, "JSON_ERROR_", 11)) {         $json_errors[$value] = $name;     } } // さまざまな深さのエラーを表示します foreach (range(4, 3, -1) as $depth) {     var_dump(json_decode($json, true, $depth));     echo 'Last error: ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL; }

上の例の出力は以下となります。

array(1) { [1]=> array(2) { ["English"]=> array(2) { [0]=> string(3) "One" [1]=> string(7) "January" } ["French"]=> array(2) { [0]=> string(3) "Une" [1]=> string(7) "Janvier" } } } Last error: JSON_ERROR_NONE NULL Last error: JSON_ERROR_DEPTH

例5 json_decode() で大きな整数値を扱う例

$json = '{"number": 12345678901234567890}'; var_dump(json_decode($json)); var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));

上の例の出力は以下となります。

object(stdClass)#1 (1) { ["number"]=> float(1.2345678901235E+19) } object(stdClass)#1 (1) { ["number"]=> string(20) "12345678901234567890" }

参考

  • json_encode() - 値を JSON 形式にして返す
  • json_last_error() - 直近に発生したエラーを返す
  • ワード検索


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

    関数名アルファベット別

    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用の拡張モジュール