作成日:2017-12-20, 更新日:2018-09-05
基本
・JSONの文字列を変換 - json_decode()
・JSONの文字列に変換 - json_encode()
| 文字列を配列にする | 配列を文字列にする | |
|---|---|---|
| PHP | json_decode() | json_encode() |
| JQUERY | JSON.parse() | JSON.stringify() |
JSONの文字列を(配列やオブジェクトに)変換 / json_decode()
オブジェクトに変換
$jsonTxt = 〇〇〇〇; $obj = json_decode($jsonTxt);
配列に変換
$jsonTxt = 〇〇〇〇; $obj = json_decode($jsonTxt, true);
DBから取得したデータをjson_decode()でエラー
原因は不明。でも解決策はあるっぽい。
$obj = json_decode(str_replace('"', '"', $jsonTxt), true);
(配列やオブジェクトを)JSONの文字列に変換 / json_encode
$ary = array(〇〇〇=>〇〇〇, 〇〇〇=>〇〇〇); $obj = json_encode($ary);
日本語絡み
日本語の入ったデータを「json_encode()」にいれると「\u3042」などのような文字コードに変換される。
「json_decode()」すれば元の日本語に戻るんだけど、ちょっとした確認用に「json_encode()」する場合は不便だったりする。
▼文字コードに変換せずに日本語のままJSONに変換
$jsonTxt = json_encode(配列やオブジェクト, JSON_UNESCAPED_UNICODE);
エラー処理
「json_last_error()」をすれば確認可能。
▼エラーの有無のみ
$ary = json_decode(〇〇〇);
if ( !json_last_error() ) {
echo 'エラーなし';
}
else {
echo 'エラーあり';
}
▼エラー内容あり
function getJsonErr() {
switch (json_last_error()) {
case JSON_ERROR_NONE: // ※「var_dump(JSON_ERROR_NONE)=0」
$result = 'no error';
break;
case JSON_ERROR_DEPTH:
$result = 'Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
$result = 'Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
$result = 'Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
$result = 'Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
$result = 'Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
$result = 'Unknown error';
break;
}
return $result;
}
$ary = json_decode(〇〇〇);
echo getJsonErr();
| 定数 | 意味 | 使用可能 |
|---|---|---|
| JSON_ERROR_NONE | エラーは発生しませんでした | |
| JSON_ERROR_DEPTH | スタックの深さの最大値を超えました | |
| JSON_ERROR_STATE_MISMATCH | JSON の形式が無効、あるいは壊れています | |
| JSON_ERROR_CTRL_CHAR | 制御文字エラー。おそらくエンコーディングが違います | |
| JSON_ERROR_SYNTAX | 構文エラー | |
| JSON_ERROR_UTF8 | 正しくエンコードされていないなど、不正な形式の UTF-8 文字 | PHP 5.3.3 |
| JSON_ERROR_RECURSION | エンコード対象の値に再帰参照が含まれています | PHP 5.5.0 |
| JSON_ERROR_INF_OR_NAN | エンコード対象の値に NAN あるいは INF が含まれています。 | PHP 5.5.0 |
| JSON_ERROR_UNSUPPORTED_TYPE | エンコード不可能な型の値が渡されました | PHP 5.5.0 |
| JSON_ERROR_INVALID_PROPERTY_NAME | A property name that cannot be encoded was given | PHP 7.0.0 |
| JSON_ERROR_UTF16 | Malformed UTF-16 characters, possibly incorrectly encoded | PHP 7.0.0 |