JSON_THROW_ON_ERROR

When something goes wrong, the json_encode() function returns false by default:

var_dump(json_encode('\x80'));

Executing the code shown above will print the output shown below:

bool(false)

This is not very helpful and to make things worse, if you want to know what went wrong, you have to call json_last_error() which returns an error code. And then you need to know what that error code means.

To make all of this easier, PHP 7.3 introduced the JSON_THROW_ON_ERROR option:

try {
    $json = json_encode('\x80', JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    print $e->getMessage();
}

Executing the code shown above will print the output shown below:

Malformed UTF-8 characters, possibly incorrectly encoded

By default, the json_decode() function handles errors similarly to json_encode() – with the difference that it returns NULL when something goes wrong:

var_dump(json_decode('{'));

Executing the code shown above will print the output shown below:

NULL

The JSON_THROW_ON_ERROR option can be used with json_decode(), too:

try {
    $variable = json_decode('{', false, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    print $e->getMessage();
}

Executing the code shown above will print the output shown below:

Syntax error