(PECL simdjson >= 2.0.0)
simdjson_decode — Decodifica una cadena JSON
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.
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 objetos.
     
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().
     
   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.
  
   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.
  
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 ejemplo anterior mostrará:
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 ejemplo anterior mostrará:
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 ejemplo anterior mostrará:
object(stdClass)#1 (1) {
  ["number"]=>
  float(1.2345678901235E+19)
}
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.
