web-dev-qa-db-ja.com

文字列が有効なJSONかどうかを判断する方法は?

PHP用の堅牢な(そして防弾)is_JSON関数スニペットを知っている人はいますか?私は(明らかに)文字列がJSONかどうかを知る必要がある状況にあります。

うーん、おそらく JSONLint リクエスト/レスポンスを介して実行しますが、それは少しやり過ぎのようです。

42
Spot

組み込みの json_decode PHP function、 json_last_error 最後のエラーを返します(例 JSON_ERROR_SYNTAX JSONではありませんでした)。

通常 json_decode はとにかくnullを返します。

66
Daff

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
17
Pascal MARTIN

私のプロジェクトでは、この関数を使用します( 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)";
}
16
cgaldiolo

json_decode()json_last_error()と一緒に機能しませんか? 「これはJSONのように見える」と言うか、実際に検証する方法だけを探していますか? json_decode()は、PHP内で効果的に検証する唯一の方法です。

4
Kitson
 $ this-> post_data = json_decode(stripslashes($ post_data)); 
 if($ this-> post_data === NULL)
 {
 die( '{"status":false、 "msg": "post_dataパラメーターは有効なJSONでなければなりません"}'); 
} 
3
McNally Paulo

これが最良かつ効率的な方法です

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}
0
Mohsin Hassan