php-json
Wrapper for PHP's Native JSON encode/decode that provides very specific exceptions and details as to what is wrong with the JSON., (*1)
Install
Install latest version using composer., (*2)
$ composer require rcs_us/php-json
Why?
Too often, we come across code that looks like:, (*3)
// Decode JSON
$decoded_json = json_encode($json_to_encode);
// Act on decoded JSON
if ( $decoded_json->some_property == "some_value" ) {
}
The problem with this is no validation of the JSON structure is done. So if you're working with invalid JSON nothing will work as expected., (*4)
This library wraps the native json_encode/json_decode functionality, and additionally calls json_last_error(). If JSON_ERROR_NONE is returned ( see http://php.net/manual/en/function.json-last-error.php ), then the value is returned, otherwise a corresponding Exception is thrown., (*5)
Several Exceptions are provided, which allows unlimited flexibility on your interaction with potentially invalid JSON., (*6)
To catch an Exception of any kind, catch \RCS\JsonException. For any type of encode related issue use \RCS\JsonEncodeException, for any type of decode related issue use \RCS\JsonDecodeException., (*7)
If you want to only catch a syntax error when decoding, use \RCS\JsonDecodeErrorSyntaxException. A list of all possible Exceptions are provided below. In short, all JSON error codes have their own exception, for both encoding and decoding., (*8)
You can very easily store this in a PSR-7 Middleware., (*9)
Details/Usage
string \RCS\Json::Encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )
mixed \RCS\Json::Decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] )
Encode example, (*10)
try {
$encoded_json = \RCS\Json::Encode($json_to_encode);
} catch ( \RCS\JsonException $e ) {
// ... Do what you want with the exception
}
Decode, (*11)
try {
$decoded_json = \RCS\Json::Decode($json_to_decode);
} catch ( \RCS\JsonException $e ) {
// ... Do what you want with the exception
}
Possible Exceptions to catch, (*12)
- \RCS\JsonException ( extends \Exception )
- \RCS\JsonDecodeException ( extends \RCS\JsonException )
- \RCS\JsonDecodeErrorDepthException ( extends \RCS\JsonDecodeException )
- \RCS\JsonDecodeErrorStateMismatchException ( extends \RCS\JsonDecodeException )
- \RCS\JsonDecodeErrorCtrlCharException ( extends \RCS\JsonDecodeException )
- \RCS\JsonDecodeErrorSyntaxException ( extends \RCS\JsonDecodeException )
- \RCS\JsonDecodeErrorUtf8Exception ( extends \RCS\JsonDecodeException )
- \RCS\JsonDecodeErrorUnknownException ( extends \RCS\JsonDecodeException )
- \RCS\JsonEncodeException ( extends \RCS\JsonException )
- \RCS\JsonEncodeErrorDepthException ( extends \RCS\JsonEncodeException )
- \RCS\JsonEncodeErrorStateMismatchException ( extends \RCS\JsonEncodeException )
- \RCS\JsonEncodeErrorCtrlCharException ( extends \RCS\JsonEncodeException )
- \RCS\JsonEncodeErrorSyntaxException ( extends \RCS\JsonEncodeException )
- \RCS\JsonEncodeErrorUtf8Exception ( extends \RCS\JsonEncodeException )
- \RCS\JsonEncodeErrorUnknownException ( extends \RCS\JsonEncodeException )