json_validate

文字列が有効なJSONかどうかを調べる

説明

bool json_validate(string $json, int $depth = 512, int $flags = 0)

指定された文字列が、文法的に有効なJSONかどうかを返します。 json_validatetrue を返す場合、 同じ depthflags を指定して json_decode を実行してもデコードは成功します。

json_validatefalse を返す場合、 原因は json_last_errorjson_last_error_msg を使って取得できます。

デコードされたJSONペイロードを使わない場合、 json_validatejson_decode よりもメモリ使用量が少なくなります。 なぜなら、ペイロードを含む配列やオブジェクト構造を組み立てる必要がないからです。

警告

 json_decode の直前に json_validate をコールすると、 文字列を不必要に2回パースすることになります。 なぜなら、json_decode はデコードしている間に暗黙のうちに文字列を検証するからです。

よって json_validate は、JSON のペイロードをすぐに使わない場合、かつ有効なJSON文字列かどうかを知る必要がある場合にのみ使うべきです。

パラメータ

json

検証する文字列

この関数は、UTF-8 でエンコードされた文字列でのみ動作します。

注意:

PHP の実装は、 » RFC 7159 の JSON のスーパーセットです。

depth

デコードされるネスト構造の深さの最大値。 この値は 0 より大きく、 2147483647 以下でなければいけません。

flags

現状は、JSON_INVALID_UTF8_IGNORE のみを受け入れます。

戻り値

指定された文字列が文法的に有効なJSONの場合、true を返します。 そうでない場合、false を返します。

エラー / 例外

depth が許可された範囲外の値の場合、 ValueError がスローされます。

flags が有効なフラグでない場合、 ValueError がスローされます。

例1 json_validate の例

<?php
var_dump
(json_validate('{ "test": { "foo": "bar" } }'));
var_dump(json_validate('{ "": "": "" } }'));
?>

上の例の出力は以下となります。

bool(true)
bool(false)

参考

  • json_decode
  • json_last_error
  • json_last_error_msg