json_encode() / json_decode()
| 対応: | PHP 5.2(2006) |
|---|
PHPの値をJSON形式の文字列に変換したり、JSON文字列をPHPの値に変換したりする関数です。APIの開発やJavaScriptとのデータ連携で頻繁に使用されます。
構文
// PHPの値をJSON文字列に変換します json_encode($value, $flags, $depth); // JSON文字列をPHPの値に変換します json_decode($json, $associative, $depth, $flags); // 直前のJSON操作のエラーコードを返します json_last_error(); // 直前のJSON操作のエラーメッセージを返します json_last_error_msg();
関数一覧
| 関数 | 概要 |
|---|---|
| json_encode($value, $flags, $depth) | PHPの値をJSON文字列に変換します。第2引数でエンコードオプション、第3引数で最大ネスト深度を指定できます。 |
| json_decode($json, $associative, $depth, $flags) | JSON文字列をPHPの値に変換します。第2引数に『true』を指定すると連想配列として返します。 |
| json_last_error() | 直前の『json_encode()』または『json_decode()』で発生したエラーコードを返します。 |
| json_last_error_msg() | 直前のJSON操作で発生したエラーメッセージを文字列で返します。 |
主なオプション定数
| 定数 | 概要 |
|---|---|
| JSON_UNESCAPED_UNICODE | 日本語などのマルチバイト文字をエスケープせずそのまま出力します。 |
| JSON_PRETTY_PRINT | 整形されたJSONを出力します。デバッグ時に見やすくなります。 |
| JSON_UNESCAPED_SLASHES | スラッシュ『/』をエスケープせずそのまま出力します。 |
| JSON_THROW_ON_ERROR | エラー発生時に『JsonException』をスローします。PHP 7.3以降で使用できます。 |
サンプルコード
sample_json_encode.php
<?php
// 連想配列をJSON文字列に変換します
$data = ['name' => 'user_1', 'age' => 30, 'city' => 'tokyo'];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $json; // 『{"name":"user_1","age":30,"city":"tokyo"}』と出力されます
// 日本語をエスケープせずに整形して出力します
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
// JSON文字列をオブジェクトに変換します
$jsonStr = '{"name":"user_2","age":25}';
$obj = json_decode($jsonStr);
echo $obj->name; // 『user_2』と出力されます
// 第2引数に true を指定すると連想配列として取得できます
$arr = json_decode($jsonStr, true);
echo $arr['age']; // 『25』と出力されます
// 不正なJSON文字列のエラーを検知します
$invalid = "{'name': 'test'}"; // シングルクォートは不正なJSON
$result = json_decode($invalid);
if (json_last_error() !== JSON_ERROR_NONE) {
echo json_last_error_msg(); // 『Syntax error』と出力されます
}
// JSON_THROW_ON_ERROR を使うと例外で処理できます
try {
$decoded = json_decode($invalid, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo $e->getMessage(); // 『Syntax error』と出力されます
}
json_encode.php
php json_encode.php
{"name":"user_1","age":30,"city":"tokyo"}
{
"name": "user_1",
"age": 30,
"city": "tokyo"
}
user_2
25
Syntax error
Syntax error
概要
『json_encode()』はPHPの配列やオブジェクトをJSON文字列に変換し、『json_decode()』はJSON文字列をPHPの値に戻す関数です。日本語を含むデータを扱う場合は、必ず『JSON_UNESCAPED_UNICODE』を指定してください。指定しないと日本語が『\uXXXX』のようにエスケープされてしまいます。
『json_decode()』の第2引数を省略するとオブジェクトとして返され、『true』を指定すると連想配列として返されます。配列として扱いたい場合が多いため、第2引数に『true』を指定する使い方が一般的です。
エラー処理には『json_last_error()』で確認する方法と、PHP 7.3以降で使える『JSON_THROW_ON_ERROR』で例外をスローする方法があります。例外を使う方法のほうがコードが簡潔になり、エラーの見落としも防げるとされています。例外処理の基本は『try / catch』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。