0Pricing
PHP Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSONのエンコードとデコード
  2. cURLでHTTPリクエストを送る
  3. APIレスポンスとエラーの処理
  4. シンプルなAPIクライアントの構築
← PHP Academyに戻る