[PHP] json_encode、json_decode 関数で発生したエラーを検出する

json_last_error 関数を使用すると、直前の json_encodejson_decode 関数でエラーが発生したかどうかを判定することができます。

<?php

// ダブルクオーテーションが 1 つ不足している
// 不正な JSON 文字列を json_decode 関数に渡す。
$raw_json = '{"name":"Taro}';
$user = json_decode($raw_json);

if(json_last_error() !== JSON_ERROR_NONE) {
  echo 'Failed to decode json.';
}

もし json_decode 関数の実行時にエラーが置きた場合、json_last_error 関数はエラーを表す int 型の数値を返します。何もエラーが無かった場合、JSON_ERROR_NONE に対応する数値が返されます。エラーが置きたときにどんな数値が返されるかは PHPマニュアル で確認することができます。上記の例では、何らかのエラーが検出された場合に Failed to decode json. という文字列を出力します。

実行結果は下記となります。

Failed to decode json.