1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/reference/json/functions/json-decode.xml
2024-07-26 11:14:07 +03:00

365 lines
11 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 9f2e30a00afda6d6b6a3e19b13956150c2eaf2c1 Maintainer: irker Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.json-decode" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>json_decode</refname>
<refpurpose>Декодирует строку JSON</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>mixed</type><methodname>json_decode</methodname>
<methodparam><type>string</type><parameter>json</parameter></methodparam>
<methodparam choice="opt"><type class="union"><type>bool</type><type>null</type></type><parameter>associative</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>depth</parameter><initializer>512</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<para>
Принимает закодированную в JSON строку и преобразовывает её в PHP-значение.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>json</parameter></term>
<listitem>
<para>
Строка (<type>string</type>) <parameter>json</parameter> для декодирования.
</para>
<para>
Функция работает только со строками в кодировке UTF-8.
</para>
&json.implementation.superset;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>associative</parameter></term>
<listitem>
<para>
Если &true;, объекты JSON будут возвращены как
ассоциативные массивы (&array;); если &false;, объекты JSON будут возвращены как объекты (&object;).
Если &null;, объекты JSON будут возвращены как ассоциативные массивы (&array;) или
объекты (&object;) в зависимости от того, установлена ли <constant>JSON_OBJECT_AS_ARRAY</constant>
в <parameter>flags</parameter>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>depth</parameter></term>
<listitem>
<para>
Максимальная глубина вложенности структуры, для которой будет производиться декодирование.
Значение должно быть больше <literal>0</literal> и меньше или равно <literal>2147483647</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Битовая маска из констант
<constant>JSON_BIGINT_AS_STRING</constant>,
<constant>JSON_INVALID_UTF8_IGNORE</constant>,
<constant>JSON_INVALID_UTF8_SUBSTITUTE</constant>,
<constant>JSON_OBJECT_AS_ARRAY</constant>,
<constant>JSON_THROW_ON_ERROR</constant>.
Поведение этих констант описаны на странице
<link linkend="json.constants">JSON-констант</link>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает данные <parameter>json</parameter>, преобразованные
в типы PHP. Не заключённые в кавычки значения <literal>true</literal>, <literal>false</literal>
и <literal>null</literal> возвращаются как типизированные значения &true;,
&false; и &null;. Значение с типом &null; также возвращается в случаях, когда
параметр <parameter>json</parameter> не может быть преобразован или глубина вложенности структуры
превышет установленный предел.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Начиная с PHP 8.0.0, если значение параметра <parameter>depth</parameter> выходит за пределы допустимого диапазона,
функция выбрасывает исключение <classname>ValueError</classname>;
ранее выдавалась ошибка уровня <constant>E_WARNING</constant>.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.3.0</entry>
<entry>
Добавлена константа <constant>JSON_THROW_ON_ERROR</constant>
для параметра <parameter>flags</parameter>.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
<parameter>associative</parameter> теперь nullable.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Добавлены константы
<constant>JSON_INVALID_UTF8_IGNORE</constant> и
<constant>JSON_INVALID_UTF8_SUBSTITUTE</constant>
для параметра <parameter>flags</parameter>.
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
Пустой ключ JSON ("") будет преобразован в пустое свойство объекта, а не
в свойство со значением <literal>_empty_</literal>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Примеры использования <function>json_decode</function></title>
<programlisting role="php">
<![CDATA[
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
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)
}
]]>
</screen>
</example>
<example>
<title>Доступ к свойствам объектов с неправильными именами</title>
<simpara>
Доступ к элементам объекта, которые содержат символы, недопустимые
в соответствии с соглашением об именах PHP (то есть дефис), может быть выполнен
путём обрамления имени элемента фигурными скобками и апострофами.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
]]>
</programlisting>
</example>
<example>
<title>Распространённая ошибка при использовании <function>json_decode</function></title>
<programlisting role="php">
<![CDATA[
<?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
?>
]]>
</programlisting>
</example>
<example>
<title>Ошибки с глубиной вложенных объектов (<parameter>depth</parameter>)</title>
<programlisting role="php">
<![CDATA[
<?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 'Последняя ошибка: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
var_dump(json_decode($json, true, 3));
echo 'Последняя ошибка: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
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"
}
}
}
Последняя ошибка: No error
NULL
Последняя ошибка: Maximum stack depth exceeded
]]>
</screen>
</example>
<example>
<title><function>json_decode</function> с большими целыми числами</title>
<programlisting role="php">
<![CDATA[
<?php
$json = '{"number": 12345678901234567890}';
var_dump(json_decode($json));
var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
object(stdClass)#1 (1) {
["number"]=>
float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
["number"]=>
string(20) "12345678901234567890"
}
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Спецификация JSON - это не JavaScript, а его подмножество.
</para>
</note>
<note>
<para>
В случае возникновения ошибки декодирования можно использовать
<function>json_last_error</function> для определения её причины.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>json_encode</function></member>
<member><function>json_last_error</function></member>
<member><function>json_last_error_msg</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->