PHP 8.4.1 Released!

simdjson_decode

(PECL simdjson >= 2.0.0)

simdjson_decodeDécode une chaîne JSON

Description

simdjson_decode(string $json, bool $associative = false, int $depth = 512): mixed

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 json_decode() lorsqu'elle est prise en charge par l'architecture de l'ordinateur.

Liste de paramètres

json

Le string json à décoder.

Cette fonction ne fonctionne qu'avec des chaînes encodées en UTF-8.

Cette fonction analyse les entrées valides que json_decode() peut décoder, à condition qu'elles soient inférieures à 4 Go de longueur.

associative

Lorsque true, les objets JSON seront retournés sous forme de tableau associatifs ; lorsqu'ils sont false, les objets JSON seront retournés sous forme d'objets.

depth

La profondeur maximale de la structure à décoder. La valeur doit être supérieure à 0, et inférieure ou égale à 2147483647. 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 json_decode().

Valeurs de retour

Renvoie la valeur encodée dans json dans le type PHP approprié. Les valeurs true, false et null sont renvoyées respectivement comme true, false et null.

Erreurs / Exceptions

Si json est invalide, une SimdJsonException est lancée à partir de PECL simdjson 2.1.0, alors qu'auparavant, une RuntimeException était lancée.

Si depth est en dehors de la plage autorisée, une SimdJsonValueError est lancée à partir de PECL simdjson 3.0.0, alors qu'auparavant, une erreur de niveau E_WARNING était lancée.

Exemples

Exemple #1 Exemples de simdjson_decode()

<?php
$json
= '{"a":1,"b":2,"c":3}';

var_dump(simdjson_decode($json));
var_dump(simdjson_decode($json, true));

?>

L'exemple ci-dessus va afficher :

object(stdClass)#1 (3) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
}
array(3) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
}

Exemple #2 Accéder à des propriétés d'objet non valides

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.

<?php

$json
= '{"foo-bar": 12345}';

$obj = simdjson_decode($json);
print
$obj->{'foo-bar'}; // 12345

?>

Exemple #3 Erreurs courantes lors de l'utilisation de simdjson_decode()

<?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

?>

Exemple #4 Erreurs de depth

<?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";
}
?>

L'exemple ci-dessus va afficher :

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)

Exemple #5 simdjson_decode() de grands entiers

<?php
$json
= '{"number": 12345678901234567890}';

var_dump(simdjson_decode($json));

?>

L'exemple ci-dessus va afficher :

object(stdClass)#1 (1) {
  ["number"]=>
  float(1.2345678901235E+19)
}

Notes

Note:

La spécification JSON n'est pas JavaScript, mais un sous-ensemble de JavaScript.

Note:

Dans le cas où le décodage échoue, une SimdJsonException est lancée et SimdJsonException::getCode() et SimdJsonException::getMessage() peuvent être utilisés pour déterminer la nature exacte de l'erreur.

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top