【サクッと解説】PHP JSONファイルの読み書き処理(json_encode/json_decode)

目次

1. 本記事のポイント

  • PHPでJSONファイルを読み書きする基本処理を解説
  • json_encode / json_decode の正しい使い方と注意点を紹介
  • ファイル入出力と組み合わせた実務での典型パターンを網羅

2. PHPにおけるJSONファイルの読み込みと出力とは?

PHPは標準関数として json_encode および json_decode を提供しており、JSON形式のデータを簡単に扱うことができます。JSONはデータ交換フォーマットとして広く利用されており、PHPではAPI通信・設定ファイル・データの保存など、さまざまな場面で活用されています。

特にWeb開発では、外部システムとの連携やフロントエンドとのデータ受け渡しの中継にJSONを用いることが一般的です。また、PHPは連想配列との親和性が高く、json_decode で取得したデータをそのまま配列として操作できる点も特徴です。

本記事では、JSON文字列とPHP配列の相互変換、ファイルとの連携、エラー処理までを一通り解説します。

3. 詳細解説

JSON文字列からPHPの配列/オブジェクトに変換(json_decode

外部から受け取ったJSON文字列を配列として扱いたい場合に使用します。

PHP
<?php
$json = '{"name":"Taro","age":20}';
$data = json_decode($json, true); // 第2引数にtrueを指定すると連想配列で返る
print_r($data);

出力結果:

PHP
Array
(
    [name] => Taro
    [age] => 20
)

第2引数を省略またはfalseにすると、stdClassオブジェクトとして返されます。

PHP
<?php
$obj = json_decode($json);
echo $obj->name; // "Taro"

PHPの配列/オブジェクトをJSON文字列に変換(json_encode

データをJSON形式で保存したり、JavaScript側に渡す際に使用します。

PHP
<?php
$data = ["name" => "Hanako", "age" => 25];
$json = json_encode($data);
echo $json;

出力結果:

PHP
{"name":"Hanako","age":25}

JSONファイルを読み込む

ファイルから直接JSONを読み込んで配列に変換するには、file_get_contentsjson_decode を組み合わせます。

PHP
<?php
$json = file_get_contents('data.json');
$data = json_decode($json, true);

この方法はローカル設定ファイルやキャッシュデータなどの読み込みに使われます。

配列をJSONファイルに保存する

JSON形式で保存するには json_encode した文字列を file_put_contents で書き込みます。

PHP
<?php
$data = ["status" => "ok", "timestamp" => time()];
file_put_contents('result.json', json_encode($data, JSON_PRETTY_PRINT));

JSON_PRETTY_PRINT を付けることで整形された出力になります。

4. よくあるミス・誤解・落とし穴

  • json_decode の第2引数を忘れると、連想配列ではなくオブジェクトとして返るため注意が必要です。
  • json_encode に特殊文字(日本語・制御文字など)を含むと、エスケープされて読みにくくなることがあります。その場合は JSON_UNESCAPED_UNICODE を付けます。
PHP
json_encode($data, JSON_UNESCAPED_UNICODE);
  • JSONファイルの読み書き時に文字コード(UTF-8)でないと処理に失敗することがあります。特にWindows環境では注意が必要です。
  • エンコード・デコードに失敗した場合は json_last_error() でエラー内容を確認できます。

5. まとめ

PHPでは json_encode / json_decode を用いることで、JSONデータとの相互変換が簡単に行えます。ファイル操作関数と組み合わせることで、設定ファイルの読み書きやキャッシュ管理など、実務でも頻出する処理が構築可能です。

ただし、文字コードや引数の指定などで想定外の挙動になることもあるため、常に出力とエラー確認を意識した実装が重要です。

よかったらシェアしてね!
  • URLをコピーしました!
目次