ホームページ  >  記事  >  新しいバージョンの PHP 7.3 での JSON エラー処理を見てみましょう。

新しいバージョンの PHP 7.3 での JSON エラー処理を見てみましょう。

无忌哥哥
无忌哥哥オリジナル
2018-07-12 11:39:343576ブラウズ

背景

現在安定した PHP V7.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"

たとえば、Larave のここをチェックして、 JSON エンコーディングが呼び出されることはエラーを引き起こしません:

// Once we get the encrypted value we'll go ahead and base64_encode the input
// vector and create the MAC for the encrypted value so we can then verify
// its authenticity. Then, we'll JSON the data into the "payload" array.
$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 エンコーディング/デコーディングにエラーがあるかどうかを判断することはできますが、エラー コードとエラー メッセージを発行する例外をスローするのと比較すると、少し面倒です。 。

JSON をキャプチャして処理するためのオプションはすでにありますが、新しいバージョンで何ができるかを見てみましょう!

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_last_error() を検索してオプションを照合する代わりに JSON データを受信する場合、JSON エンコードとデコードでエラー ハンドラーを利用できるユーザー コードに特に便利だと思います。

この json_decode() 関数にはいくつかのパラメーターがあり、エラー処理を利用したい場合は PHP 7.3 以下のようになります:

use JsonException;
try {
    return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    // Handle the JSON Exception
}
// Or even just let it bubble up...
/** 
 * 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 エラー コードを取得しました次の関数を使用します:

// Error code
json_last_error();
// Human-friendly message
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()
}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。