simdjson_decode

(PECL simdjson >= 2.0.0)

simdjson_decodeDecodifica una cadena JSON

Descripción

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

Toma una cadena codificada en JSON y la convierte en un valor PHP. Esto utiliza una Instrucción Simultánea más Rápida, Datos Múltiples (Simultaneous Instruction, Multiple Data - SIMD) que json_decode() cuando es soportada por la arquitectura del ordenador.

Parámetros

json

El string json a decodificar.

Esta función solo funciona con cadenas codificadas en UTF-8.

Esta función analiza las entradas válidas que json_decode() puede decodificar, siempre que sean inferiores a 4 Go de longitud.

associative

Cuando true, los objetos JSON serán devueltos como array asociativos; cuando sean false, los objetos JSON serán devueltos como objects.

depth

La profundidad máxima de la estructura a decodificar. El valor debe ser superior a 0, e inferior o igual a 2147483647. Aquellos que llamen a esta función deberían utilizar valores razonablemente pequeños, ya que profundidades mayores requieren más espacio de búfer y aumentarán la profundidad de recursión, a diferencia de la implementación actual de json_decode().

Valores devueltos

Devuelve el valor codificado en json en el tipo PHP apropiado. Los valores true, false y null son devueltos respectivamente como true, false y null.

Errores/Excepciones

Si json es inválido, una SimdJsonException es lanzada a partir de PECL simdjson 2.1.0, mientras que anteriormente, una RuntimeException era lanzada.

Si depth está fuera del rango permitido, una SimdJsonValueError es lanzada a partir de PECL simdjson 3.0.0, mientras que anteriormente, un error de nivel E_WARNING era lanzado.

Ejemplos

Ejemplo #1 Ejemplos de simdjson_decode()

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

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

?>

El resultado del ejemplo sería:

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

Ejemplo #2 Acceder a propiedades de objeto no válidas

Acceder a elementos en un objeto que contienen caracteres no permitidos por la convención de nomenclatura de PHP (por ejemplo, el guion) puede ser logrado encapsulando el nombre del elemento entre llaves y comillas.

<?php

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

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

?>

Ejemplo #3 Errores comunes al usar simdjson_decode()

<?php

// las siguientes cadenas son válidas en JavaScript pero no en JSON

// el nombre y el valor deben estar encerrados entre comillas dobles
// las comillas simples no son válidas
$bad_json = "{ 'bar': 'baz' }";
simdjson_decode($bad_json); // Lanza SimdJsonException

// el nombre debe estar encerrado entre comillas dobles
$bad_json = '{ bar: "baz" }';
simdjson_decode($bad_json); // Lanza SimdJsonException

// las comas finales no están permitidas
$bad_json = '{ bar: "baz", }';
simdjson_decode($bad_json); // Lanza SimdJsonException

?>

Ejemplo #4 Errores de depth

<?php
// Codificar datos con una profundidad máxima de 4
// (array -> array -> array -> string)
$json = json_encode(
[
1 => [
'English' => [
'One',
'January'
],
'French' => [
'Une',
'Janvier'
]
]
]
);

// Mostrar errores para diferentes profundidades.
var_dump(simdjson_decode($json, true, 4));
try {
var_dump(simdjson_decode($json, true, 3));
} catch (
SimdJsonException $e) {
echo
"Capturado: ", $e->getMessage(), "\n";
}
?>

El resultado del ejemplo sería:

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"
    }
  }
}
Capturado: El documento JSON era demasiado profundo (demasiados objetos y arrays anidados)

Ejemplo #5 simdjson_decode() de grandes enteros

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

var_dump(simdjson_decode($json));

?>

El resultado del ejemplo sería:

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

Notas

Nota:

La especificación JSON no es JavaScript, sino un subconjunto de JavaScript.

Nota:

En el caso de que la decodificación falle, una SimdJsonException es lanzada y SimdJsonException::getCode() y SimdJsonException::getMessage() pueden ser utilizados para determinar la naturaleza exacta del error.

Ver también

add a note

User Contributed Notes

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