作成日: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 |