1. 首页
  2. Laravel

LaravelPHP 7.3:JSON错误处理

PHP 7.3的一个新特性是更好地处理json_encode()和json_decode()的错误。RFC以23票对0票获得一致通过。让我们看看如何在当前稳定的PHP v7.2中处理JSON错误,如果您想确定JSON是否无效,您必须使用json_last_error()函数来验证:
1>>> json_decode(\”{\”);3>>> json_last_error();5>>> json_last_error() === JSON_ERROR_NONE7>>> json_last_error_msg()
例如,在LaravelIlluminateEncryptionEncrypter类中,这里有一个检查,以确保调用json_encode()不会导致错误:
1// Once we get the encrypted value we\”ll go ahead and base64_encode the input 2// vector and create the MAC for the encrypted value so we can then verify 3// its authenticity. Then, we\”ll JSON the data into the \”payload\” array.> 5 6if (json_last_error() !== JSON_ERROR_NONE) { 7throw new EncryptException(\”Could not encrypt the data.\”); 8} 910return base64_encode($json);
我们至少可以确定JSON编码/解码是否有错误,但是与抛出异常相比,它有点笨拙,因为异常将错误代码和消息整齐地打包在一起。
尽管您必须选择使用v7.3有一个很好的方法让你捕捉和处理JSON异常让我们看看新的标志,我们可以使用!PHP 7.3中的Throw on Error标志使用新的选项标志JSON_THROW_ON_ERROR可以用try/catch重写这段代码。可能是这样的:
1use JsonException;23try {5return base64_encode($json);6} catch (JsonException $e) {7throw new EncryptException(\”Could not encrypt the data.\”, 0, $e);8}
我认为这种新样式对于用户代码特别有用,当您收到一些JSON数据时,而不是到处寻找json_last_error()和匹配的标志,JSON编码和解码可以利用错误处理程序。
json_decode()函数还有几个参数,如果您想利用错误处理的优势,它在PHP 7.3中将类似于下面的内容:
1use JsonException; 2 3try { 4return json_decode($jsonString, = 512, JSON_THROW_ON_ERROR); 5} catch (JsonException $e) { 6// Handle the JSON Exception 7} 8 9// Or even just let it bubble up…1011/**12 * Decode a JSON string into an array13 *14 * @return array15 * @throws JsonException16 */17function decode($jsonString) {18return json_decode($jsonString, = 512, JSON_THROW_ON_ERROR);19}
获取错误代码和消息之前,您可以使用以下函数检索JSON错误代码和消息:
1// Error code2json_last_error();34// Human-friendly message5json_last_error_msg();
如果您使用新的JSON_THROW_ON_ERROR标志,下面是如何获得代码和消息的方法:
1try {2return json_decode($jsonString, = 512, JSON_THROW_ON_ERROR);3} catch (JsonException $e) {4$e->getMessage(); // like json_last_error_msg()5$e->getCode(); // like json_last_error()6}
有关更多API详细信息,请参阅基本异常类,15***异常是Exception的一个子类。
JSON在PHP 7.3中的默认行为当升级到PHP 7.3时,您的代码将在第一天向后兼容并继续按预期工作。
json_encode|decode()行为没有改变,抛出错误RFC添加了一个新的选项和异常类。
。另外,请通读RFC for JSON_THROW_ON_ERROR以获得有关PHP 7.3的建议的完整详细信息。

LaravelPHP 7.3:JSON错误处理 为WP2原创文章,链接:https://www.wp2.cn/laravel/laravelphp-7-3json%e9%94%99%e8%af%af%e5%a4%84%e7%90%86/