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

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

Jul 12, 2018 am 11:39 AM

背景

現在安定した 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)