2009-07-27 26 views
36

誰にもPHPのis_JSON機能のスニペットを知っていますか?私は(明らかに)文字列がJSONかどうかを知る必要がある状況があります。文字列が有効なJSONかどうかを判断する方法?

ええと、おそらくJSONLintのリクエスト/レスポンスで実行していますが、それはちょっと残酷すぎるようです。

+1

シュート;私は防弾ソリューションを手軽に持っていましたが、それほど頑強ではなかったので、私はそれを捨てなければなりませんでした:P –

答えて

60

を使用している場合は、最後のエラーを返しますjson_last_errorjson_decode PHP機能、内蔵の(あなたの文字列がJSON例えばJSON_ERROR_SYNTAXなかった場合)。

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

+3

ええ、私はばかです。これは明らかで、私はそれを逃した。私はこれを私が必要とするものにまとめることができます。ありがとう。 – Spot

+0

ほとんどの場合固溶ですが、注意してください。 json_decodeは、例えば以下のように解析することもできる。数値文字列。文字列内の電話番号は整数に変換されます。 ただし、これはすべてのサーバーで発生するわけではありません。私のWindowsマシンでは、整数を取得しています。Linuxの開発システムでは、私は間違っています。私はあなたのPHPのインストールと設定に依存していると仮定します – StoryTeller

+0

StoryTellerが述べたように - json_decode( "51232")は51232と評価されるので、すべての状況で役に立つとは限りません –

17

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 
4

json_decode()json_last_error()で動作しますか? 「これはJSONのように見えるか」、あるいは実際にそれを検証する方法を探していますか? json_decode()はPHP内で効果的に検証する唯一の方法です。私はこの機能を使用する私のプロジェクトのために

3
 
$this->post_data = json_decode(stripslashes($post_data)); 
    if($this->post_data === NULL) 
    { 
    die('{"status":false,"msg":"The post_data parameter must be valid JSON"}'); 
    } 
13

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

あなたが特定のアプリケーション "エラー" を検出することができます)(json_decodeに渡すのと同じ引数を渡します

// 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)"; 
} 
+0

私はPHPの専門家ではありませんが、非常に効率的です.JSONのデコードが必要な場合は、文字列が有効なJSONであるかどうかをテストするときと、実際にそれをデコードするときに2回行います。 json_decodeが既に実行されていると仮定して、この関数に最後のJSONエラーのみをチェックさせるのが賢明であるようです。私は他の意見を歓迎する。 –

+0

こんにちは@LiranH、元のポスターは 'is_JSON'関数を要求しました。したがって、関数内でjson_decodeが要求された文字列に対して実行されたと仮定することはできません。その場合、関数の名前は 'is_last_json_decoded_string_a_JSON_string'となります。 – cgaldiolo

+0

それは十分です@cgaldiolo –

関連する問題