php json error,PHP 7.3 中的 JSON 错误处理
PHP 7.3 為 json_encode()?和?json_decode() 函數增加的一個新特性使其更好的處理錯誤。這個特性「?RFC?」以 23 比 0 的投票結果被一致接受。讓我們看一看在 PHP 7.2 及一下版本中是如何處理 JSON 錯誤的,以及 PHP 7.3 中新的改進。
背景
當前在 PHP7.2 版本中,如果要確定 JSON 是否無效,則必須使用 json_last_error() 函數來驗證:
>>> json_decode("{");
=> null
>>> json_last_error();
=> 4
>>> json_last_error() === JSON_ERROR_NONE
=> false
>>> json_last_error_msg()
=> "Syntax error"
舉個栗子,在 Laravel 中使用 Illuminate\Encryption\Encrypter 類檢查以及確保調用 json_encode() 不會導致出錯。
// 當我們獲取到加密的數值時,我們會先用 base64_encode 處理
// 并且為我們要加密的數值創建用來驗證的 MAC 值
// 最后我們會將三者組成的數組 JSON 格式化
$json = json_encode(compact('iv', 'value', 'mac'));
if (json_last_error() !== JSON_ERROR_NONE) {
throw new EncryptException('Could not encrypt the data.');
}
return base64_encode($json);
我們至少可以確定 JSON 編碼/解碼是否有錯,但與拋出異常相比,它有點笨拙,它將錯誤代碼和消息整齊的打包在一塊。
雖然我們必須選擇使用它,但是在 v7.3 版本中有一個很好的方法讓你捕獲和處理 JSON 異常——接下來讓我們看看我們可以使用的新特性( flag 字面來翻就是標志、旗幟這些,但是此處感覺特性比較好,才疏學淺,請指正)。
PHP 7.3 中的拋出錯誤的特性
新的特性選項 JSON_THROW_ON_ERROR 可以使用 try/catch 重寫此代碼塊,大約類似于如下內容:
use JsonException;
try {
$json = json_encode(compact('iv', 'value', 'mac'), JSON_THROW_ON_ERROR);
return base64_encode($json);
} catch (JsonException $e) {
throw new EncryptException('Could not encrypt the data.', 0, $e);
}
我想當你收到一些 JSON 數據而不用去深究和 json_last_error() 匹配的標志時,這種風格對的 userland 代碼特別有用,這樣 JSON 編碼和解碼可以更加高效的去處理錯誤
PHP 7.3 中 json_decode 函數增加了一些參數,用來處理錯誤,比如如下所示:
use JsonException;
try {
return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
// 處理 JSON 異常
}
// Or even just let it bubble up...
/**
* 將 JSON 字符串解碼為數組 (Decode a JSON string into an array)
*
* @return array
* @throws JsonException
*/
function decode($jsonString) {
return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
}
獲取錯誤代碼和錯誤信息
以前你想查看 JSON 的錯誤代碼和錯誤信息,需要使用以下函數:
// 錯誤代碼
json_last_error();
// 易于理解的錯誤信息
json_last_error_msg();
如果你使用新的「JSON_THROW_ON_ERROR」參數,獲取錯誤代碼和錯誤信息的方式如下:
try {
return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
$e->getMessage(); // like json_last_error_msg()
$e->getCode(); // like json_last_error()
}
查看更多 API 詳細信息,請訪問「base Exception?」,?JsonException 異常是?Exception 的一個子類。
JSON 在 PHP 7.3 中的默認行為
當升級到 PHP 7.3 時,你將在一天內完成代碼的向后兼容,并按照預期的結果繼續工作。
PHP 的默認函數?json_encode|decode()?的行為沒有改變, 在拋出的錯誤中 RFC 增加了一個新的選項和異常類。
了解更多
本文中的所有譯文僅用于學習和交流目的,轉載請務必注明文章譯者、出處、和本文鏈接
我們的翻譯工作遵照 CC 協議,如果我們的工作有侵犯到您的權益,請及時聯系我們。
總結
以上是生活随笔為你收集整理的php json error,PHP 7.3 中的 JSON 错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界java版forge怎么用_我的
- 下一篇: php运行条件,PHP配置环境要求 ph