FastSitePHP\Encoding\Json

Encode to JSON and decode from JSON.

This classes uses the built-in [json_encode()] and [json_decode()] functions however rather than returning [false] or [null] on errors an exception is thrown.

This class will also create a polyfill function for [json_last_error_msg()] on old versions of PHP if there is an error, and provides compatible code for JSON_BIGINT_AS_STRING when decoding. By default PHP converts large integers to floating-point numbers. When this class is used to decode large ints are converted to strings to prevent data loss.

For most code calling the built-in [json_encode()] and [json_decode()] functions are recommend over this. The main reason to use this class is for JSON_BIGINT_AS_STRING support on old versions of PHP.

Código Fonte

GitHub

Código de Exemplo

Sintaxe PHP - Codificação - JSON, Base64, Base64-URL

// Criar um objeto e um array básicos para codificar
$object = new \stdClass;
$object->string = 'Test';
$object->number = 123;
$object->bool = true;

$array = [
    'string' => 'Test',
    'number' => 123,
    'bool' => true,
];

// -------------------------------------------
// Codificar e Decodificar JSON
// -------------------------------------------

// Desde que o array PHP seja utilizado como um Dicionário ou Hash,
// ambos exemplos imprimem:
//     {"string":"Test","number":123,"bool":true}
$json = json_encode($object);
echo $json;
echo "\n";

$json = json_encode($array);
echo $json;
echo "\n\n";

// Utilize o segundo parâmetro para JSON formatado
$json = json_encode($object, JSON_PRETTY_PRINT);
echo $json;
echo "\n";

// Decodifique e imprima o objeto com detalhes utilizando [print_r()]:
$decoded = json_decode($json);
print_r($decoded);
echo "\n";

// Por padrão objetos são decodificados como objetos da [stdClass].
// Para retornar um array ao invés de um objeto passe [true] como o
// segundo parâmetro.
$decoded = json_decode($json, true);
print_r($decoded);
echo "\n";

// Se houver um erro ao decodificar dados JSON será retornado [null].
// Se você precisar Se você precisar lidar com um JSON inválido, você pode
// fazer dessa forma:
if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) {
    throw new \Exception('Erro decodificando Dados JSON: ' . json_last_error_msg());
}

// O FastSitePHP inclui uma classe auxiliar JSON que lança excessẽs em erros
// JSON ao invés de utilizar o comportamento padrão de retornar [false] ou
// [null].
$json = \FastSitePHP\Encoding\Json::encode($object);
$decoded = \FastSitePHP\Encoding\Json::decode($json);

/* Muitas vezes no entanto, na maioria dos códigos, simplesmente chamar
[json_encode()] ou [json_decode()] será suficiente. Por padrão o PHP
decodifica números grandes como ponto flutuante. Se você quer uma
decodificação mais estrita para que venham em string, então você pode
utilizar opções adicionais. É assim que a classe JSON do FastSitePHP
decodifica quando é utilizada nas classes JWT, Encryptione SignedData.
[JSON_BIGINT_AS_STRING] não está disponível no PHP 5.3 então o
FastSitePHP utiliza código compatível. */
$decoded = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);

// -------------------------------------------
// Codifique e Decodifique Base64
// -------------------------------------------

// Imprime: "VGhpcyBpcyBhIHRlc3Q="
$data = 'Isto é um teste';
$base64 = base64_encode($data);
echo $base64;
echo "\n";

// Ao decodificar, se houver um erro então [false] é retornado
$decoded = base64_decode($base64);
print_r($decoded);
echo "\n\n";

// ---------------------------------------------
// Codifique e Decodifique o Formato Base64-URL
// ---------------------------------------------

/* O PHP não tem funções internas para o formato Base64-URL então o
FastSitePHP inclui uma classe auxiliar com métodos estáticos. Eles se
comportam de forma similar às funções integradas [base64_encode()] e
[base64_decode()], então, se houver um erro, será retornado [false]. */

$base64url = \FastSitePHP\Encoding\Base64Url::encode($data);
echo $base64;
echo "\n";

$decoded = \FastSitePHP\Encoding\Base64Url::decode($base64url);
print_r($decoded);
echo "\n";

Métodos

encode($data, $options = JSON_UNESCAPED_UNICODE)

Função Estática

Encode data to a JSON String. By default JSON_UNESCAPED_UNICODE is used and [$options] can be set to any valid value for [json_encode()].

Retorna: string

decode($text)

Função Estática

Decode a JSON string back to data. This is equivalent to using the following settings with the built-in function:

    $data = json_decode($text, true, 512, JSON_BIGINT_AS_STRING);

When objects are decoded they are returned as PHP Associative Arrays.

Retorna: mixed