rcs_us / 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.
Requires
- php: ^5.2 || ^7.0 || ^8.0
This package is not auto-updated.
Last update: 2025-03-28 11:32:35 UTC
README
Wrapper for PHP's Native JSON encode/decode that provides very specific exceptions and details as to what is wrong with the JSON.
Install
Install latest version using composer.
$ composer require rcs_us/php-json
Why?
Too often, we come across code that looks like:
// 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.
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.
Several Exceptions are provided, which allows unlimited flexibility on your interaction with potentially invalid JSON.
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.
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.
You can very easily store this in a PSR-7 Middleware.
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
try { $encoded_json = \RCS\Json::Encode($json_to_encode); } catch ( \RCS\JsonException $e ) { // ... Do what you want with the exception }
Decode
try { $decoded_json = \RCS\Json::Decode($json_to_decode); } catch ( \RCS\JsonException $e ) { // ... Do what you want with the exception }
Possible Exceptions to catch
- \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 )