array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ja', ), 'this' => array ( 0 => 'function.json-decode.php', 1 => 'json_decode', ), 'up' => array ( 0 => 'ref.json.php', 1 => 'JSON 関数', ), 'prev' => array ( 0 => 'ref.json.php', 1 => 'JSON 関数', ), 'next' => array ( 0 => 'function.json-encode.php', 1 => 'json_encode', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ja', 'path' => 'reference/json/functions/json-decode.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_decode — JSON 文字列をデコードする
JSON エンコードされた文字列を受け取り、それを PHP の値に変換します。
json
デコード対象となる json
文字列。
この関数は UTF-8 でエンコードされた文字列でのみ動作します。
注意:
PHP の実装は、 » RFC 7159 の JSON のスーパーセットです。
associative
true
の場合、返されるオブジェクトは連想配列形式になります。
false
の場合、返されるオブジェクトは object になります。
null
の場合、返されるオブジェクトは flags
に
JSON_OBJECT_AS_ARRAY
が設定されているかどうかによって、
連想配列形式か object かが変化します。
depth
デコードするデータのネストの深さの最大値。
この値は 0
より大きく、
2147483647
以下でなければいけません。
flags
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
を返します。
depth
が範囲外の値の場合、
PHP 8.0.0 以降では
ValueError がスローされます。
それより前のバージョンでは、
E_WARNING
レベルの警告が発生していました。
バージョン | 説明 |
---|---|
7.3.0 |
flags パラメータに
JSON_THROW_ON_ERROR
が追加されました。
|
7.2.0 |
associative は nullable になりました。
|
7.2.0 |
flags パラメータに
JSON_INVALID_UTF8_IGNORE および
JSON_INVALID_UTF8_SUBSTITUTE が追加されました。
|
7.1.0 |
空の JSONキー ("") は、
_empty_ というキーではなく、
空のオブジェクトプロパティにエンコードされるようになりました。
|
例1 json_decode() の例
<?php
$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 の命名規約では使えない文字 (ハイフンなど) を含む要素にアクセスするには、 要素名を波括弧とアポストロフィで囲みます。
<?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
例3 json_decode() でのありがちな間違い
<?php
// 以下の文字列は 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
エラー
<?php
// データをエンコードします。ネストの深さは4です (array -> array -> array -> string)
$json = json_encode(
array(
1 => array(
'English' => array(
'One',
'January'
),
'French' => array(
'Une',
'Janvier'
)
)
)
);
// さまざまな深さのエラーを表示します
var_dump(json_decode($json, true, 4));
echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
var_dump(json_decode($json, true, 3));
echo 'Last error: ', json_last_error_msg(), 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: No error NULL Last error: Maximum stack depth exceeded
例5 json_decode() で大きな整数値を扱う例
<?php
$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 の仕様は JavaScript そのものではなく、JavaScript のサブセットです。
注意:
デコードに失敗した場合は、json_last_error() を使用すればエラーの正確な状態を知ることができます。