PHP用の堅牢な(そして防弾)is_JSON関数スニペットを知っている人はいますか?私は(明らかに)文字列がJSONかどうかを知る必要がある状況にあります。
うーん、おそらく JSONLint リクエスト/レスポンスを介して実行しますが、それは少しやり過ぎのようです。
組み込みの json_decode
PHP function、 json_last_error
最後のエラーを返します(例 JSON_ERROR_SYNTAX
JSONではありませんでした)。
通常 json_decode
はとにかくnull
を返します。
json_decode
。指定された文字列が有効なJSONエンコードデータでない場合、null
を返す必要がありますか?
マニュアルページの例3を参照してください。
// the following strings are valid JavaScript but not valid JSON
// the name and value must be enclosed in double quotes
// single quotes are not valid
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null
// the name must be enclosed in double quotes
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null
// trailing commas are not allowed
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null
私のプロジェクトでは、この関数を使用します( json_decode() docsの「Note」をお読みください)。
Json_decode()に渡すのと同じ引数を渡すと、特定のアプリケーションの「エラー」(深度エラーなど)を検出できます
PHP> = 5.6
// PHP >= 5.6
function is_JSON(...$args) {
json_decode(...$args);
return (json_last_error()===JSON_ERROR_NONE);
}
PHP> = 5.3
// PHP >= 5.3
function is_JSON() {
call_user_func_array('json_decode',func_get_args());
return (json_last_error()===JSON_ERROR_NONE);
}
使用例:
$mystring = '{"param":"value"}';
if (is_JSON($mystring)) {
echo "Valid JSON string";
} else {
$error = json_last_error_msg();
echo "Not valid JSON string ($error)";
}
json_decode()
はjson_last_error()
と一緒に機能しませんか? 「これはJSONのように見える」と言うか、実際に検証する方法だけを探していますか? json_decode()
は、PHP内で効果的に検証する唯一の方法です。
$ this-> post_data = json_decode(stripslashes($ post_data)); if($ this-> post_data === NULL) { die( '{"status":false、 "msg": "post_dataパラメーターは有効なJSONでなければなりません"}'); }
これが最良かつ効率的な方法です
function isJson($string) {
return (json_decode($string) == null) ? false : true;
}