25

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.

1

4 Answers 4

37

Another way to handle json decode error:-

if ($jsonObj === null && json_last_error() !== JSON_ERROR_NONE) {
   echo "json data is incorrect";
}
Sign up to request clarification or add additional context in comments.

1 Comment

I had to remove $jsonObj === null.
36

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

Comments

11

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

5 Comments

Why call is_null() when you can just check if $jsonObj === null?
There is no difference between comparing is_null() and === null. I would say its just a preference. Check this one stackoverflow.com/questions/8228837/is-nullx-vs-x-null-in-php for more information.
@MilenGardev the answer you linked to does not state "there is no difference". It in fact lists the differences, and thus which one to chose depends on the scenario. If you do not need a callback then there's no sense in not using the more performant === null than the function which has additional overhead.
@James I would challenge you to benchmark the 2 cases side by side over 1000 iterations. The performance difference is so negligible that it almost won't even be measurable with microtime. Even in an environment that needs to be highly optimized, this wouldn't even make my list.
"If you do not need XYZ then there's no sense in not using the more performant"
5

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.

1 Comment

nope, when i exec json_decode on bad content, other code is useless, php return "Exception" and nothing i can do !

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.