ホームページ >バックエンド開発 >PHPチュートリアル >「json_decode()」を使用して PHP で不正な JSON データを確実に検出する方法

「json_decode()」を使用して PHP で不正な JSON データを確実に検出する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-19 14:05:02239ブラウズ

How to Reliably Detect Malformed JSON Data in PHP Using `json_decode()`?

PHP で JSON デコードを使用して不正な JSON データを検出する方法

json_decode() を使用して JSON データを解析しようとすると、無効な形式が処理されます。データの整合性を確保するために重要です。この関数は通常は効果的ですが、特定の入力タイプを処理するときに不一致が発生する可能性があります。

問題のシナリオ

次のシナリオを考えてみましょう:

if(!json_decode($_POST)) {
  echo "bad json data!";
  exit;
}

このスクリプトは、無効な JSON データを検出して処理することを目的としています。ただし、$_POST に有効な JSON 形式 (例: { bar: "baz" }) が含まれている場合、 json_decode() はエラーを正しく管理し、「不正な JSON データ!」と表示します。ただし、$_POST が無効な形式 (例: 「無効なデータ」) に設定されている場合、予期しない警告が発生し、その後に「不正な JSON データ!」が表示されます:

Warning: json_decode() expects parameter 1 to be string, array given in ...
bad json data!

カスタム検出または代替解決策?

この問題に対処するには、開発者は有効な JSON データを検出するカスタム スクリプトを作成するか、他の利用可能なオプションを検討することを検討できます。

JSON デコード機能を使用した解決策:

JSON デコードには、考慮すべき重要な特性がいくつかあります。

  • エラーの場合は、解析されたデータまたは null を返します。
  • また、返される場合もあります。 JSON 文字列に null が含まれる有効な場合は null です。
  • 特定のエラーに対して警告が生成されます。

警告の問題を防ぐために、@ 演算子を使用できます (ただし、@ 演算子は使用されます)。デバッグが困難になる可能性があるため、推奨されません)。この演算子は、スクリプトの実行を継続しながら警告を抑制します。

$_POST = array('bad data');
$data = @json_decode($_POST);

警告を抑制した後、$data が null かどうかを確認する必要があります。無効な形式と有効な null 値を区別するには、 json_last_error() を利用できます。この関数は、最新の JSON 解析エラーがあればそれを返します。

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

これらの手法を組み合わせることで、json_decode() を使用して PHP で無効な JSON データを効果的に検出して処理できます。

以上が「json_decode()」を使用して PHP で不正な JSON データを確実に検出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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