1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-25 00:02:09 +01:00
Files
archived-doc-ru/reference/simdjson/functions/simdjson-decode.xml

302 lines
9.8 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: 78cc29837ed269491a4fc330797c7184eca7ed2f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="function.simdjson-decode">
<refnamediv>
<refname>simdjson_decode</refname>
<refpurpose>Декодирует строку JSON</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>mixed</type><methodname>simdjson_decode</methodname>
<methodparam><type>string</type><parameter>json</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>associative</parameter><initializer>&false;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>depth</parameter><initializer>512</initializer></methodparam>
</methodsynopsis>
<simpara>
Принимает строку в кодировке JSON и преобразовывает её в значение PHP.
При этом будет использована более быстрая реализация Simultaneous Instruction,
Multiple Data, чем в функции <function>json_decode</function>,
если это поддерживается архитектурой компьютера.
</simpara>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>json</parameter></term>
<listitem>
<simpara>
Декодируемая строка (<type>string</type>) в <parameter>json</parameter> формате.
</simpara>
<simpara>
Функция работает только со строками в кодировке UTF-8.
</simpara>
<simpara>
Функция анализирует допустимые входные данные, которые функция <function>json_decode</function>
может декодировать, при условии, что их длина не превышает 4 Гб.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>associative</parameter></term>
<listitem>
<simpara>
При значении &true;, объекты JSON будут возвращены как ассоциативные массивы (&array;);
при значении &false;, объекты JSON будут возвращены как объекты (&object;).
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>depth</parameter></term>
<listitem>
<simpara>
Максимальная глубина вложенности декодируемой структуры.
Значение должно быть больше <literal>0</literal> и меньше или равно <literal>2147483647</literal>.
Вызывающие команды должны использовать достаточно маленькие значения,
поскольку большая глубина требуют больше места в буфере и увеличивают глубину рекурсии,
в отличие от текущей реализации функции <function>json_decode</function>.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
Возвращает значение, закодированное в параметре <parameter>json</parameter>
в соответствующем типе PHP.
Значения <literal>true</literal>, <literal>false</literal> и <literal>null</literal>
возвращаются как &true;, &false; и &null; соответственно.
</simpara>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<simpara>
Если параметр <parameter>json</parameter> недействителен, то начиная с версии PECL simdjson 2.1.0
выбрасывается исключение <classname>SimdJsonException</classname>,
тогда как ранее выбрасывалось исключение <classname>RuntimeException</classname>.
</simpara>
<simpara>
Если параметр <parameter>depth</parameter> находится вне допустимого диапазона,
то начиная с версии PECL simdjson 3.0.0 выбрасывается исключение <classname>SimdJsonValueError</classname>,
тогда как ранее выдавалась ошибка уровня <constant>E_WARNING</constant>.
</simpara>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Примеры использования <function>simdjson_decode</function></title>
<programlisting role="php">
<![CDATA[
<?php
$json = '{"a":1,"b":2,"c":3}';
var_dump(simdjson_decode($json));
var_dump(simdjson_decode($json, true));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
object(stdClass)#1 (3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
]]>
</screen>
</example>
<example>
<title>Доступ к недопустимым свойствам объекта</title>
<simpara>
Доступ к элементам объекта, содержащим символы, не разрешённые соглашением PHP об именовании (например, дефис),
может быть осуществлён путём заключения имени элемента в фигурные скобки и апостроф.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$json = '{"foo-bar": 12345}';
$obj = simdjson_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
]]>
</programlisting>
</example>
<example>
<title>Распространённые ошибки при использовании <function>simdjson_decode</function></title>
<programlisting role="php">
<![CDATA[
<?php
// следующие строки являются допустимыми JavaScript, но не являются допустимыми JSON
// имя и значение должны быть заключены в двойные кавычки
// одинарные кавычки недопустимы
$bad_json = "{ 'bar': 'baz' }";
simdjson_decode($bad_json); // Выбрасывается исключение SimdJsonException
// имя должно быть заключено в двойные кавычки
$bad_json = '{ bar: "baz" }';
simdjson_decode($bad_json); // Выбрасывается исключение SimdJsonException
// запятые в конце не допускаются
$bad_json = '{ bar: "baz", }';
simdjson_decode($bad_json); // Выбрасывается исключение SimdJsonException
?>
]]>
</programlisting>
</example>
<example>
<title>Ошибки <parameter>depth</parameter></title>
<programlisting role="php">
<![CDATA[
<?php
// Кодирование некоторых данных с максимальной глубиной 4
// (array -> array -> array -> string)
$json = json_encode(
[
1 => [
'English' => [
'One',
'January'
],
'French' => [
'Une',
'Janvier'
]
]
]
);
// Отображение ошибок для разных глубин.
var_dump(simdjson_decode($json, true, 4));
try {
var_dump(simdjson_decode($json, true, 3));
} catch (SimdJsonException $e) {
echo "Попался: ", $e->getMessage(), "\n";
}
?>
]]>
</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"
}
}
}
Попался: The JSON document was too deep (too many nested objects and arrays)
]]>
</screen>
</example>
<example>
<title><function>simdjson_decode</function> больших целых чисел</title>
<programlisting role="php">
<![CDATA[
<?php
$json = '{"number": 12345678901234567890}';
var_dump(simdjson_decode($json));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
object(stdClass)#1 (1) {
["number"]=>
float(1.2345678901235E+19)
}
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<simpara>
Спецификация JSON - это не JavaScript, а подмножество JavaScript.
</simpara>
</note>
<note>
<simpara>
В случае возникновения ошибки декодирования выбрасывается исключение <classname>SimdJsonException</classname>,
а <methodname>SimdJsonException::getCode</methodname> и <methodname>SimdJsonException::getMessage</methodname>
могут быть использованы для определения точной природы ошибки.
</simpara>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><function>json_encode</function></member>
<member><function>json_decode</function></member>
</simplelist>
</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
-->