vineet
vineet

Reputation: 14236

How handling error of JSON decode by try and catch

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

Answers (4)

sergej
sergej

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

Dimag Kharab
Dimag Kharab

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 . '"}';
}

Read this too

Upvotes: 11

user3567805
user3567805

Reputation:

Another way to handle json decode error:-

if ($jsonObj === null && json_last_error() !== JSON_ERROR_NONE) {
   echo "json data is incorrect";
}

Upvotes: 37

Verkade89
Verkade89

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

Related Questions