PHPで文字列がJSON形式かどうか判定する方法!
PHPで変数に格納されている文字列がJSON形式なのかどうかを判定したい時があります。今回はPHPで文字列がJSON形式かどうか判定する方法をサンプルコード付きで解説します。
PHPで文字列がJSON形式かどうか判定したい
PHPで変数に格納されている文字列がJSON形式なのかどうかを判定したい時があります。
最初からJSONをparseして連想配列などの形式で取得できていればいいですが、時に文字列として変数に入っている状況で、JSONとして強制的にparseしていいのかどうかを判断するために文字列がJSON形式かどうかをチェックするケースなどです。
今回はPHPで文字列がJSON形式かどうか判定する方法をサンプルコード付きで解説します。
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形式で出力する方法を解説しています。ぜひあわせて確認してみましょう。