PHPで文字列がJSON形式かどうか判定する方法!

PHPで変数に格納されている文字列がJSON形式なのかどうかを判定したい時があります。今回はPHPで文字列がJSON形式かどうか判定する方法をサンプルコード付きで解説します。

コンテンツ [表示]

  1. 1PHPで文字列がJSON形式かどうか判定したい
  2. 2PHPで文字列がJSON形式かどうか判定する方法
  3. 2.1PHPのjson_decode関数を使って判定する
  4. 2.2PHPのjson_last_error関数を使って判定する
  5. 3まとめ

PHPで文字列がJSON形式かどうか判定したい

PHPで変数に格納されている文字列がJSON形式なのかどうかを判定したい時があります。

最初からJSONをparseして連想配列などの形式で取得できていればいいですが、時に文字列として変数に入っている状況で、JSONとして強制的にparseしていいのかどうかを判断するために文字列がJSON形式かどうかをチェックするケースなどです。

今回はPHPで文字列がJSON形式かどうか判定する方法をサンプルコード付きで解説します。

Photo bydoki7

PHPで文字列がJSON形式かどうか判定する方法

PHPで文字列が、JSON形式かどうか判定する方法についてご紹介します。

PHPのjson_decode関数を使って判定する

PHPでJSONをデコードするには、json_decode関数を用います。json_decode関数でJSONのデコードに失敗したりエンコードされたデータが再帰制限を超えているなどの場合、NULLが返ります。

JSON形式かどうか判定する方法として、json_decode関数の戻り値がNULLかどうかで JSON形式かを判定する事ができます。

json_decode関数の戻り値を使って判定

$variables = json_decode('abcdefg');
if (!$variables) {
	return 'JSONではありません';
}
return 'JSONです';

json_decode関数にセットした引数が文字列の場合、戻り値はNULLを戻しますが、引数によっては正しくデコードできていない場合でも、NULL以外の値が戻ってくるケースがあります。

サンプルコードでjson_decode関数の戻り値をチェックしてみましょう。

引数が文字列の場合は、正しくデコードできていない時の戻り値がNULLです。

しかし引数が暗黙的な型変換によって数値と判断できる値であった場合、正しくデコードできていない時にはint型に変換された引数がそのまま戻り値となっています。

また、bool型の場合も同様に 戻り値がNULLではありません。

PHPのjson_last_error関数を使って判定する

json_last_error関数は、直近に発生したJSON エンコード/デコード処理エラー を取得する事ができます。

json_last_error関数の戻り値はJSON_ERROR_NONE(0)以外の場合はエラーと判定します。

先ほどのjson_encode関数の戻り値のサンプルコードにjson_last_error関数の戻り値も表示して一緒に確認してみましょう。
 

引数'abcderg'以外では全てJSON_ERROR_NONE(0)になっています。
サンプルコード一番上のJSON文字列以外は全て正常にJSON形式に変換されていないにも関わらず、json_last_error関数の戻り値は正常に終了したと判断されています。

まとめ

json_decode関数のNULL判定も、json_last_error関数のエラー判定のどちらを使っても引数によっては正しくJSON形式に変換できたかどうかの判定条件には満たしていません。

すべての条件を満たした状態で、JSON形式がどうかを判断するには、文字列をJSON形式にデコードした値がarray型であるかどうかを判別要素にするのが一番シンプルかつ安全な方法ではないかと思います。

それでは最後に、上記サンプルコードがJSON形式であるかどうかの判定を、PHPのis_array関数を使って確認してみましょう。

一番上のJSON形式文字列 以外は、JSON形式ではないと判定する事ができました。

上記サンプルコードでは、下記の様にJSON形式を判定しています。

JSON形式の判定

$json = json_decode($string);
if (is_array($json) === true) {
	return 'JSONです';
}
return 'JSONではありません';



今回はPHPで文字列がJSON形式かどうか判定する方法について解説しましたが、下記ではJSON形式で出力する方法を解説しています。ぜひあわせて確認してみましょう。

あわせて読みたい
PHPでJSON形式で出力する方法を解説!のイメージ
PHPでJSON形式で出力する方法を解説!
PHPでJSON形式の出力をするには、明示的にJSON形式である事を宣言する必要があります。PHPでJSON形式の出力方法について解説します。
GeekHive採用サイト

関連記事