Reputation: 14236
I am unable to handle JSON decode errors. Here is my code:
try {
$jsonData = file_get_contents($filePath) . ']';
$jsonObj = json_decode($jsonData, true);
}
catch (Exception $e) {
echo '{"result":"FALSE","message":"Caught exception: ' . $e->getMessage() . ' ~' . $filePath . '"}';
}
I am a new PHP programmer. Sorry, if something is wrong.
Upvotes: 25
Views: 43664
Reputation: 1227
Since PHP 7.3 one can use the JSON_THROW_ON_ERROR
constant.
try {
$jsonObj = json_decode($jsonData, $associative=true, $depth=512, JSON_THROW_ON_ERROR);
} catch (Exception $e) {
// handle exception
}
More: https://www.php.net/manual/de/function.json-decode.php#refsect1-function.json-decode-changelog
Upvotes: 33
Reputation: 4519
May be you can try, validating json_decode
try {
$jsonData = file_get_contents($filePath) . ']';
$jsonObj = json_decode($jsonData, true);
if (is_null($jsonObj)) {
throw ('Error');
}
} catch (Exception $e) {
echo '{"result":"FALSE","message":"Caught exception: ' .
$e->getMessage() . ' ~' . $filePath . '"}';
}
Upvotes: 11
Reputation:
Another way to handle json decode error:-
if ($jsonObj === null && json_last_error() !== JSON_ERROR_NONE) {
echo "json data is incorrect";
}
Upvotes: 37
Reputation: 393
json_decode returns null when a error occurs, like no valid json or exceeded depth size. So basically you just check with if whether the jsondata you obtained is null or not. If it is, use json_last_error to see what went wrong, if not then continue with the script.
$json_data = json_decode($source, true);
if($json_data == null){
echo json_last_error() . "<br>";
echo $source; // good to check what the source was, to see where it went wrong
}else{
//continue with script
}
Something like that should work.
Upvotes: 5