Files
php-doc-ru/reference/json/functions/json-encode.xml
Andrey Gromov 4a04095b19 upd
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@342207 c90b9560-bf6c-de11-be94-00142212c4b1
2017-03-29 06:07:57 +00:00

428 lines
14 KiB
XML
Raw 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: de02a9c50b31de3cb2a21407baaf383b10b333f2 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<refentry xml:id="function.json-encode" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>json_encode</refname>
<refpurpose>Возвращает JSON-представление данных</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>json_encode</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>depth</parameter><initializer>512</initializer></methodparam>
</methodsynopsis>
<para>
Возвращает строку, содержащую JSON-представление <parameter>value</parameter>.
</para>
<para>
На кодирование влияет параметр <parameter>options</parameter> и,
дополнительно, кодирование значений типа float зависит от значения
<link linkend="ini.serialize-precision">serialize_precision</link>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
<parameter>value</parameter> - значение, которое будет закодировано. Может быть
любого типа за исключением <type>resource</type>.
</para>
<para>
Функция работает только с кодировкой UTF-8.
</para>
&json.implementation.superset;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
Битовая маска, составляемая из значений
<constant>JSON_HEX_QUOT</constant>,
<constant>JSON_HEX_TAG</constant>,
<constant>JSON_HEX_AMP</constant>,
<constant>JSON_HEX_APOS</constant>,
<constant>JSON_NUMERIC_CHECK</constant>,
<constant>JSON_PRETTY_PRINT</constant>,
<constant>JSON_UNESCAPED_SLASHES</constant>,
<constant>JSON_FORCE_OBJECT</constant>,
<constant>JSON_PRESERVE_ZERO_FRACTION</constant>,
<constant>JSON_UNESCAPED_UNICODE</constant>,
<constant>JSON_PARTIAL_OUTPUT_ON_ERROR</constant>.
Смысл этих констант объясняется на <link linkend="json.constants">странице JSON
констант</link>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>depth</parameter></term>
<listitem>
<para>
Устанавливает максимальную глубину. Должен быть больше нуля.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает JSON строку (<type>string</type>) либо &return.falseforfailure;.
</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.1.0</entry>
<entry>
При кодировании чисел с плавающей запятой используется <link
linkend="ini.serialize-precision">serialize_precision</link> вместо <link
linkend="ini.precision">precision</link>
</entry>
</row>
<row>
<entry>5.6.6</entry>
<entry>
Добавлено значение <constant>JSON_PRESERVE_ZERO_FRACTION</constant>
для параметра <parameter>option</parameter>.
</entry>
</row>
<row>
<entry>5.5.0</entry>
<entry>
Добавлен параметр <parameter>depth</parameter>.
</entry>
</row>
<row>
<entry>5.4.0</entry>
<entry>
Для <parameter>options</parameter> были добавлены константы
<constant>JSON_PRETTY_PRINT</constant>,
<constant>JSON_UNESCAPED_SLASHES</constant>, и
<constant>JSON_UNESCAPED_UNICODE</constant>.
</entry>
</row>
<row>
<entry>5.3.3</entry>
<entry>
Добавлено значение <constant>JSON_NUMERIC_CHECK</constant>
для параметра <parameter>option</parameter>.
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Был добавлен параметр <parameter>options</parameter>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>json_encode</function></title>
<programlisting role="php">
<![CDATA[
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
{"a":1,"b":2,"c":3,"d":4,"e":5}
]]>
</screen>
</example>
<example>
<title>
Пример использования <function>json_encode</function>, с опциями
</title>
<programlisting role="php">
<![CDATA[
<?php
$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9");
echo "Обычно: ", json_encode($a), "\n";
echo "Тэги: ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Апострофы: ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Кавычки: ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Амперсанты: ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Юникод: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "Все: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";
$b = array();
echo "Пустой массива как массив: ", json_encode($b), "\n";
echo "Пустой массив как объект: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";
$c = array(array(1,2,3));
echo "Неассоциативный массив как массив: ", json_encode($c), "\n";
echo "Неассоциативный массив как объект: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "Ассоциативный массив всегда отображается как объект: ", json_encode($d), "\n";
echo "Ассоциативный массив всегда отображается как объект: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Обычно: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"]
Тэги: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
Апострофы: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Кавычки: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
Амперсанты: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"]
Все: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]
Отображение пустого массива как массива: []
Отображение не ассоциативного массива как объекта: {}
Отображение неассоциативного массива как массива: [[1,2,3]]
Отображение неассоциативного массива как объекта: {"0":{"0":1,"1":2,"2":3}}
Ассоциативный массив всегда отображается как объект: {"foo":"bar","baz":"long"}
Ассоциативный массив всегда отображается как объект: {"foo":"bar","baz":"long"}
]]>
</screen>
</example>
<example>
<title>Пример использования опции JSON_NUMERIC_CHECK</title>
<programlisting role="php">
<![CDATA[
<?php
echo "Строки, содержащие числа преобразуются в числа".PHP_EOL;
$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
$numbers,
json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "Строки, содержащие некорректно заданные числа".PHP_EOL;
$strings = array('+a33123456789', 'a123');
var_dump(
$strings,
json_encode($strings, JSON_NUMERIC_CHECK)
);
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Строки, содержащие числа преобразуются в числа
array(4) {
[0]=>
string(7) "+123123"
[1]=>
string(7) "-123123"
[2]=>
string(5) "1.2e3"
[3]=>
string(7) "0.00001"
}
string(28) "[123123,-123123,1200,1.0e-5]"
Строки, содержащие некорректно заданные числа
array(2) {
[0]=>
string(13) "+a33123456789"
[1]=>
string(4) "a123"
}
string(24) "["+a33123456789","a123"]"
]]>
</screen>
</example>
<example>
<title>Пример с последовательными индексами, начинающимися с нуля, и
непоследовательными индексами массивов</title>
<programlisting role="php">
<![CDATA[
<?php
echo "Последовательный массив".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);
echo PHP_EOL."Непоследовательный массив".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);
echo PHP_EOL."Последовательный массив с одним удаленным индексом".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Последовательный массив
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"
Непоследовательный массив
array(4) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(3) "baz"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"
Последовательный массив с одним удаленным индексом
array(3) {
[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"
]]>
</screen>
</example>
<example>
<title>Пример использования опции<constant>JSON_PRESERVE_ZERO_FRACTION</constant> </title>
<programlisting role="php">
<![CDATA[
<?php
var_dump(json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION));
var_dump(json_encode(12.0));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
string(4) "12.0"
string(2) "12"
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
В случае ошибки кодирования можно использовать <function>json_last_error</function>
для определения точной ошибки.
</para>
</note>
<note>
<para>
При кодировании массива в случае, если его индексы не являются
последовательными числами от нуля, то все индексы кодируются в строковые
ключи для каждой пары индекс-значение.
</para>
</note>
<note>
<para>
Как и эталонный кодировщик JSON, <function>json_encode</function>
будет создавать JSON в виде простого значения (т.е. не объект и не массив),
если ему переданы <type>string</type>, <type>integer</type>,
<type>float</type> или <type>boolean</type> в качестве входящего значения
<parameter>value</parameter>. Большинство декодеров воспринимают эти значения
как правильный JSON, но некоторые нет, потому что спецификация неоднозначна
на этот счет.
</para>
<para>
Всегда проверяйте, что ваш JSON декодер может правильно обрабатывать
данные, которые вы создаете с помощью <function>json_encode</function>.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><interfacename>JsonSerializable</interfacename></member>
<member><function>json_decode</function></member>
<member><function>json_last_error</function></member>
<member><function>serialize</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
-->