json_decodeDecodes a JSON string
&reftitle.description;
mixedjson_decodestringjsonboolnullassociative&null;intdepth512intflags0
Takes a JSON encoded string and converts it into a PHP variable.
&reftitle.parameters;
json
The jsonstring being decoded.
This function only works with UTF-8 encoded strings.
&json.implementation.superset;
associative
When &true;, JSON objects will be returned as
associative &array;s; when &false;, JSON objects will be returned as &object;s.
When &null;, JSON objects will be returned as associative &array;s or
&object;s depending on whether JSON_OBJECT_AS_ARRAY
is set in the flags.
depth
User specified recursion depth.
flags
Bitmask of
JSON_BIGINT_AS_STRING,
JSON_INVALID_UTF8_IGNORE,
JSON_INVALID_UTF8_SUBSTITUTE,
JSON_OBJECT_AS_ARRAY,
JSON_THROW_ON_ERROR.
The behaviour of these constants is described on the
JSON constants page.
&reftitle.returnvalues;
Returns the value encoded in json in appropriate
PHP type. Values true, false and
null are returned as &true;, &false; and &null;
respectively. &null; is returned if the json cannot
be decoded or if the encoded data is deeper than the recursion limit.
&reftitle.changelog;
&Version;&Description;7.3.0JSON_THROW_ON_ERRORflags was added.
7.2.0associative is nullable now.
7.2.0JSON_INVALID_UTF8_IGNORE, and
JSON_INVALID_UTF8_SUBSTITUTEflags were added.
7.1.0
An empty JSON key ("") can be encoded to the empty object property
instead of using a key with value _empty_.
&reftitle.examples;
json_decode examples
]]>
&example.outputs;
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)
}
]]>
Accessing invalid object properties
Accessing elements within an object that contain characters not
permitted under PHP's naming convention (e.g. the hyphen) can be
accomplished by encapsulating the element name within braces and the apostrophe.
{'foo-bar'}; // 12345
?>
]]>
common mistakes using json_decode
]]>
depth errors
array(
'English' => array(
'One',
'January'
),
'French' => array(
'Une',
'Janvier'
)
)
)
);
// Define the errors.
$constants = get_defined_constants(true);
$json_errors = array();
foreach ($constants["json"] as $name => $value) {
if (!strncmp($name, "JSON_ERROR_", 11)) {
$json_errors[$value] = $name;
}
}
// Show the errors for different depths.
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;
}
?>
]]>
&example.outputs;
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
]]>
json_decode of large integers
]]>
&example.outputs;
float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
["number"]=>
string(20) "12345678901234567890"
}
]]>
&reftitle.notes;
The JSON spec is not JavaScript, but a subset of JavaScript.
In the event of a failure to decode, json_last_error
can be used to determine the exact nature of the error.
&reftitle.seealso;
json_encodejson_last_error