Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. json_encode() / json_decode()

json_encode() / json_decode()対応: PHP 5(2004)

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以降で使用できます。
サンプルコード
<?php
// 連想配列をJSON文字列に変換します。
$data = ['name' => '山田太郎', 'age' => 30, 'city' => '東京'];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $json; // 『{"name":"山田太郎","age":30,"city":"東京"}』と出力されます。

// 日本語をエスケープせずに整形して出力します。
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

// JSON文字列をオブジェクトに変換します。
$jsonStr = '{"name":"佐藤花子","age":25}';
$obj = json_decode($jsonStr);
echo $obj->name; // 『佐藤花子』と出力されます。

// 第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の配列やオブジェクトを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』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。