International PHP Conference Munich 2025

simdjson_decode

(PECL simdjson >= 2.0.0)

simdjson_decodeDecodifica uma string JSON

Descrição

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

Recebe uma string codificada em JSON e a converte em um valor PHP. Isso usa uma implementação mais rápida de Instrução Simultânea, Múltiplos Dados do que json_decode() quando suportado pela arquitetura do computador.

Parâmetros

json

A string json sendo decodificada.

Esta função só funciona com strings codificadas em UTF-8.

Esta função analisa entradas válidas que json_decode() pode decodificar, desde que tenham menos de 4 GiB de comprimento.

associative

Quando true, os objetos JSON serão retornados como arrays associativos; quando false, os objetos JSON serão retornados como objects.

depth

Profundidade máxima de aninhamento da estrutura que está sendo decodificada. O valor deve ser maior que 0, e menor ou igual a 2147483647. Os chamadores devem usar valores razoavelmente pequenos, porque profundidades maiores exigem mais espaço de buffer e aumentarão a profundidade de recursão, ao contrário da implementação atual de json_decode().

Valor Retornado

Retorna o valor codificado em json no tipo PHP apropriado. Os valores true, false e null são retornados como true, false e null respectivamente.

Erros/Exceções

Se json for inválido, uma SimdJsonException será lançada a partir do PECL simdjson 2.1.0, enquanto anteriormente, uma RuntimeException era lançada.

Se depth estiver fora do intervalo permitido, um SimdJsonValueError será gerado a partir do PECL simdjson 3.0.0, enquanto anteriormente, um erro de nível E_WARNING era gerado.

Exemplos

Exemplo #1 Exemplos de simdjson_decode()

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

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

?>

O exemplo acima produzirá:

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

Exemplo #2 Acessando propriedades de objetos inválidas

O acesso a elementos dentro de um objeto que contêm caracteres não permitidos pela convenção de nomenclatura do PHP (por exemplo, o hífen) pode ser feito encapsulando o nome do elemento entre chaves e o apóstrofo.

<?php

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

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

?>

Exemplo #3 Erros comuns usando simdjson_decode()

<?php

// as seguintes strings são JavaScripts válidos, mas não JSONs válidos

// o nome e o valor devem estar entre aspas duplas
// aspas simples não são válidas
$bad_json = "{ 'bar': 'baz' }";
simdjson_decode($bad_json); // Lança SimdJsonException

// o nome deve estar entre aspas duplas
$bad_json = '{ bar: "baz" }';
simdjson_decode($bad_json); // Lança SimdJsonException

// vírgulas finais não são permitidas
$bad_json = '{ bar: "baz", }';
simdjson_decode($bad_json); // Lança SimdJsonException

?>

Exemplo #4 Erros de depth

<?php
// Codificando alguns dados com uma profundidade máxima de 4
// (array -> array -> array -> string)
$json = json_encode(
[
1 => [
'English' => [
'One',
'January'
],
'French' => [
'Une',
'Janvier'
]
]
]
);

// Mostra os erros 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";
}
?>

O exemplo acima produzirá:

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: The JSON document was too deep (too many nested objects and arrays)

Exemplo #5 simdjson_decode() de números inteiros grandes

<?php
$json
= '{"número": 12345678901234567890}';

var_dump(simdjson_decode($json));

?>

O exemplo acima produzirá:

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

Notas

Nota:

A especificação JSON não é JavaScript, mas um subconjunto de JavaScript.

Nota:

Em caso de falha na decodificação, uma SimdJsonException é lançada e SimdJsonException::getCode() e SimdJsonException::getMessage() podem ser usados para determinar a natureza exata do erro.

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top