JSONのエンコードとデコード
PHP配列をJSONに変換し、json_encode/json_decodeでJSONレスポンスを解析します
「JSONのエンコードとデコード」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
JSONとは何ですか
JSON(JavaScript Object Notation)は、API通信や設定ファイルに使用される軽量なデータ形式です。PHPには、JSONをエンコードおよびデコードする組み込み関数があります。
json_encode()
PHPの値(配列、オブジェクト、スカラー値)をJSON文字列に変換します。
<?php
$data = ["name" => "Alice", "age" => 30, "active" => true];
$json = json_encode($data);
echo $json; // {"name":"Alice","age":30,"active":true}json_decode()
JSON文字列を解析してPHPの値を返します。デフォルトではstdClassオブジェクトを返します。連想配列にするには、2番目の引数にtrueを渡します。
<?php
$json = '{"name":"Alice","age":30}';
$obj = json_decode($json); // stdClass
$arr = json_decode($json, true); // associative array
echo $arr["name"]; // "Alice"JSONの整形表示
JSON_PRETTY_PRINTフラグを使用すると、人間が読みやすい形式で出力を整形できます。
<?php
$json = json_encode(["a" => 1, "b" => 2], JSON_PRETTY_PRINT);
echo $json;
// {
// "a": 1,
// "b": 2
// }便利なjson_encodeフラグ
よく使うフラグには、JSON_UNESCAPED_UNICODE(UTF-8をそのまま保持)、JSON_UNESCAPED_SLASHES(/の前にバックスラッシュを付けない)、JSON_THROW_ON_ERROR(失敗時に例外をスロー)があります。
<?php
$json = json_encode(["url" => "https://example.com/path"],
JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);エラー処理
エンコードまたはデコードの後にjson_last_error()を確認するか、JSON_THROW_ON_ERRORを使用して例外を自動的に取得してください。
<?php
try {
$data = json_decode($input, true, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
echo "Invalid JSON: ".$e->getMessage();
}オブジェクトのエンコード
オブジェクトはJSONオブジェクトとしてエンコードされます。デフォルトでは、publicプロパティのみが含まれます。シリアライズを制御するにはJsonSerializableを実装してください。
<?php
class Point implements \JsonSerializable {
public function __construct(
private float $x, private float $y
) {}
public function jsonSerialize(): mixed {
return ["x" => $this->x, "y" => $this->y];
}
}
echo json_encode(new Point(1.0, 2.5)); // {"x":1,"y":2.5}ネストした構造
JSONはネストに対応しています。深くネストされたPHP配列も、ネストしたJSONオブジェクトや配列としてシームレスにエンコードされます。
<?php
$order = [
"id" => 1,
"items" => [
["sku" => "A1", "qty" => 2],
["sku" => "B3", "qty" => 1],
],
];
echo json_encode($order, JSON_PRETTY_PRINT);デコードの深さ
json_decodeの第3引数で、再帰の最大深度を設定します(デフォルトは512です)。非常に深いJSONでは、より大きな値が必要になる場合があります。
JSON_NUMERIC_CHECK
JSON_NUMERIC_CHECKフラグを使用すると、エンコード時に数値文字列が数値へ変換されます。電話番号が壊れる可能性があるため、使用には注意してください。
大きなJSONのストリーミング処理
非常に大きなJSONファイルでは、ファイル全体をjson_decodeで読み込む代わりに、ストリーミングパーサーライブラリ(例:halaxa/json-machine)を使用してください。
まとめ
json_encodeはPHPの値をJSON文字列に変換します。json_decodeはJSONを解析します。安全にエラーを処理するにはJSON_THROW_ON_ERRORを使用してください。
理解度チェック
json_decodeから連想配列を取得するにはどうすればよいでしょうか。
よくある質問
「JSONのエンコードとデコード」レッスンは無料ですか?
はい。「JSONのエンコードとデコード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「JSONのエンコードとデコード」で何を学びますか?
PHP配列をJSONに変換し、json_encode/json_decodeでJSONレスポンスを解析します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「JSONのエンコードとデコード」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- JSONのエンコードとデコード
- cURLでHTTPリクエストを送る
- APIレスポンスとエラーの処理
- シンプルなAPIクライアントの構築