Files
doc-fr/reference/simdjson/functions/simdjson-decode.xml
2024-08-29 13:42:49 +01:00

306 lines
8.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 3f3362ebcdd1a27cf9c9c751dd5cbe8a6264d1c3 Maintainer: Fan2Shrek Status: ready -->
<!-- Reviewed: yes -->
<refentry xml:id="function.simdjson-decode" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>simdjson_decode</refname>
<refpurpose>Décode une chaîne 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>
<para>
Prend une chaîne encodée en JSON et la convertit en une valeur PHP.
Cela utilise une Instruction Simultanée plus Rapide, Données Multiples (Simultaneous Instruction, Multiple Data - SIMD)
que <function>json_decode</function> lorsqu'elle est prise en charge par l'architecture de l'ordinateur.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>json</parameter></term>
<listitem>
<para>
Le <type>string</type> <parameter>json</parameter> à décoder.
</para>
<para>
Cette fonction ne fonctionne qu'avec des chaînes encodées en UTF-8.
</para>
<para>
Cette fonction analyse les entrées valides que
<function>json_decode</function> peut décoder,
à condition qu'elles soient inférieures à 4 Go de longueur.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>associative</parameter></term>
<listitem>
<para>
Lorsque &true;, les objets JSON seront retournés sous forme
de &array; associatifs ; lorsqu'ils sont &false;, les objets JSON seront retournés sous forme d'&object;s.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>depth</parameter></term>
<listitem>
<para>
La profondeur maximale de la structure à décoder.
La valeur doit être supérieure à <literal>0</literal>,
et inférieure ou égale à <literal>2147483647</literal>.
Ceux qui appellent cette fonction devraient utiliser des valeurs raisonnablement petites,
car des profondeurs plus importantes nécessitent plus d'espace tampon et augmenteront
la profondeur de récursion, contrairement à l'implémentation actuelle de <function>json_decode</function>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Renvoie la valeur encodée dans <parameter>json</parameter> dans le
type PHP approprié. Les valeurs <literal>true</literal>, <literal>false</literal> et
<literal>null</literal> sont renvoyées respectivement comme &true;, &false; et &null;.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Si <parameter>json</parameter> est invalide, une <classname>SimdJsonException</classname> est lancée à partir de PECL simdjson 2.1.0,
alors qu'auparavant, une <classname>RuntimeException</classname> était lancée.
</para>
<para>
Si <parameter>depth</parameter> est en dehors de la plage autorisée,
une <classname>SimdJsonValueError</classname> est lancée à partir de PECL simdjson 3.0.0,
alors qu'auparavant, une erreur de niveau <constant>E_WARNING</constant> était lancée.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Exemples de <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>Accéder à des propriétés d'objet non valides</title>
<simpara>
Accéder à des éléments dans un objet qui contiennent des caractères non
autorisés par la convention de nommage de PHP (par exemple, le trait d'union) peut être
accompli en encapsulant le nom de l'élément entre des accolades et des apostrophes.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$json = '{"foo-bar": 12345}';
$obj = simdjson_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
]]>
</programlisting>
</example>
<example>
<title>Erreurs courantes lors de l'utilisation de <function>simdjson_decode</function></title>
<programlisting role="php">
<![CDATA[
<?php
// les chaînes suivantes sont valides en JavaScript mais pas en JSON
// le nom et la valeur doivent être encadrés de guillemets doubles
// les guillemets simples ne sont pas valides
$bad_json = "{ 'bar': 'baz' }";
simdjson_decode($bad_json); // Throws SimdJsonException
// le nom doit être encadré de guillemets doubles
$bad_json = '{ bar: "baz" }';
simdjson_decode($bad_json); // Throws SimdJsonException
// les virgules de fin ne sont pas autorisées
$bad_json = '{ bar: "baz", }';
simdjson_decode($bad_json); // Throws SimdJsonException
?>
]]>
</programlisting>
</example>
<example>
<title>Erreurs de <parameter>depth</parameter></title>
<programlisting role="php">
<![CDATA[
<?php
// Encoder des données avec une profondeur maximale de 4
// (array -> array -> array -> string)
$json = json_encode(
[
1 => [
'English' => [
'One',
'January'
],
'French' => [
'Une',
'Janvier'
]
]
]
);
// Afficher les erreurs pour différentes profondeurs.
var_dump(simdjson_decode($json, true, 4));
try {
var_dump(simdjson_decode($json, true, 3));
} catch (SimdJsonException $e) {
echo "Caught: ", $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"
}
}
}
Caught: The JSON document was too deep (too many nested objects and arrays)
]]>
</screen>
</example>
<example>
<title><function>simdjson_decode</function> de grands entiers</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>
<para>
La spécification JSON n'est pas JavaScript, mais un sous-ensemble de JavaScript.
</para>
</note>
<note>
<para>
Dans le cas où le décodage échoue,
une <classname>SimdJsonException</classname> est lancée
et <methodname>SimdJsonException::getCode</methodname> et
<methodname>SimdJsonException::getMessage</methodname> peuvent être utilisés
pour déterminer la nature exacte de l'erreur.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>json_encode</function></member>
<member><function>json_decode</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
-->