如何通过try和catch处理json解码的错误

时间:2015-07-23 05:35:02

标签: php

我无法处理json decode错误。我在下面提到我的代码: -

try{
 $jsonData=file_get_contents($filePath). ']';
 $jsonObj = json_decode($jsonData, true);
}  catch(Exception $e){
  echo '{"result":"FALSE","message":"Caught exception: '. 
     $e->getMessage().' ~'.$filePath.'"}';
}

我是新的php程序员。对不起,如果出了什么问题。

4 个答案:

答案 0 :(得分:16)

处理json解码错误的另一种方法: -

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

答案 1 :(得分:5)

您可以尝试验证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

答案 2 :(得分:4)

json_decode在发生错误时返回null,如无效json或超出深度大小。所以基本上你只需检查你获得的jsondata是否为null。如果是,请使用json_last_error查看出现了什么问题,如果没有,则继续使用该脚本。

$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
}

这样的事情应该有用。

答案 3 :(得分:3)

自PHP 7.3起,就可以使用JSON_THROW_ON_ERROR常量。

try {
    $jsonObj = json_decode($jsonData, true, $depth=512, JSON_THROW_ON_ERROR);
} catch (Exception $e) {
    // handle exception
}

更多:https://www.php.net/manual/de/function.json-decode.php#refsect1-function.json-decode-changelog