json_last_error関数は、直近のJSONエンコード/デコード処理中に発生したエラーを返します。
返り値は整数の値で、以下の定数になります。
0 JSON_ERROR_NONE:エラーは発生しませんでした
1 JSON_ERROR_DEPTH:スタックの深さの最大値を超えました
2 JSON_ERROR_STATE_MISMATCH:JSONの形式が無効、あるいは壊れています
3 JSON_ERROR_CTRL_CHAR:制御文字エラー。おそらくエンコーディングが違います
4 JSON_ERROR_SYNTAX:構文エラー
5 JSON_ERROR_UTF8:正しくエンコードされていないなど、不正な形式のUTF-8文字
以下の連想配列をjson_encode関数でJSON形式の文字列に変換し、エラーがない場合のみ出力します。最初はエラーを発生させるために、mb_convert_encoding関数で文字コードをUTF-8からSJISに変換します。
<?php
$list = array(
'web' => 'http://shop.jp/',
'item' => array(
'トマト' => 100,
'キャベツ' => 120,
'ピーマン' => 80,
),
);
$list = mb_convert_encoding($list, "SJIS", "UTF-8");
$jsonstr = json_encode($list, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
$json_error = json_last_error();
var_dump($json_error);
echo json_last_error_msg();
if($json_error === JSON_ERROR_NONE) :
print_r($jsonstr);
endif;
?>
実行結果は以下の通りです。
json_last_error関数の返り値は「5」で、定数は「JSON_ERROR_UTF8」です。json_last_error_msg関数でエラーメッセージが表示できます。
エラーが発生しているため、JSON出力部分は実行されません。
int(5)
Malformed UTF-8 characters, possibly incorrectly encoded
次に、文字コード変換の処理部分をコメントアウトします。
<?php
$list = array(
'web' => 'http://shop.jp/',
'item' => array(
'トマト' => 100,
'キャベツ' => 120,
'ピーマン' => 80,
),
);
//$list = mb_convert_encoding($list, "SJIS", "UTF-8");
$jsonstr = json_encode($list, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
$json_error = json_last_error();
var_dump($json_error);
echo json_last_error_msg();
if($json_error === JSON_ERROR_NONE) :
print_r($jsonstr);
endif;
?>
実行結果は以下の通りです。
json_last_error関数の返り値は「0」で、定数は「JSON_ERROR_NONE」です。
結果、JSON出力部分が実行されます。
int(0)
No error
{
"web": "http://shop.jp/",
"item": {
"トマト": 100,
"キャベツ": 120,
"ピーマン": 80
}
}
