2017-9-18
[PHP] json_encode/decodeはエラーが起きても例外を投げない
以下のように記載されている。
エンコードに失敗した場合は、json_last_error() を使ってエラーの内容を調べることができます。
デコードに失敗した場合は、json_last_error() を使用すればエラーの正確な状態を知ることができます。
json のシンタックスがおかしい等の場合でも例外を投げず、json_encode なら false、json_decode なら NULL を返却するのみで不具合を検出し辛い。
そのため、以下のようにクラスを作成してエラー内容と共に例外を投げるようにした。
class JSON
{
    public static function decode($json)
    {
        $result = json_decode($json);
        if ($result === NULL)
        {
            throw new \Exception(json_last_error_msg());
        }
        return $result;
    }
    public static function encode($array)
    {
        $result = json_encode($array);
        if ($result === false)
        {
            throw new \Exception(json_last_error_msg());
        }
        return $result;
    }
}