PHPで配列をJSON形式に変換する方法!初心者でもわかるjson_encodeとjson_decodeの使い方
生徒
「PHPで配列をウェブで使うJSONっていう形式に変換できるって聞いたんですが、どうやるんですか?」
先生
「PHPではjson_encodeという関数を使えば、配列をJSON形式の文字列に変換できますよ。逆に、JSONから配列に戻すにはjson_decodeを使います。」
生徒
「そのJSONってなんですか?初めて聞きました…」
先生
「JSONは“ジェイソン”と読みます。データをテキストでやりとりするための形式で、今どきのアプリやウェブサービスでよく使われています。実際の使い方を見ていきましょう!」
1. JSON形式とは?初心者でもわかるデータの仕組み
JSON(ジェイソン)は、JavaScript Object Notationの略称で、プログラミング言語を問わず「データをやり取りするための共通ルール」として世界中で使われているテキスト形式です。
最大の特徴は、「人間がパッと見ても内容が理解しやすく、コンピュータにとっても処理が非常に速い」という点にあります。もともとはJavaScriptから生まれた形式ですが、現在ではPHP、Python、Rubyなど、ほぼすべての言語で標準的なデータ交換フォーマットとして採用されています。
身近な例え:
JSONは、いわば「海外の人ともやり取りできる世界共通のレシート」のようなものです。品名(キー)と価格(値)がセットになっていて、誰が見ても何が書いてあるか分かりますよね。
JSONの書き方は非常にシンプルです。基本的には{ }(波括弧)の中に、「名前(キー)」と「値」をセットにして記述します。
{
"name": "たろう",
"age": 20,
"is_student": true,
"hobbies": ["読書", "旅行"]
}
このように、名前、年齢といった単一のデータだけでなく、数値や「はい/いいえ(真偽値)」、さらに複数のデータをまとめたリスト(配列)まで、複雑な情報もスッキリと1つのテキストにまとめることができます。
この「共通の形」があるおかげで、PHPで作られたサーバーから、ユーザーが使っているスマートフォンのアプリへスムーズに情報を届けることができるのです。
2. PHPの配列をJSON形式に変換する「json_encode」の使い方
PHPで用意したデータをJSON形式に変換したいときは、json_encode(ジェイソン・エンコード)という関数を使います。この関数を使うことで、PHP専用の「配列」というデータのまとまりを、ブラウザや他のプログラムでも読み取れる「テキスト(文字列)」に変換できます。
プログラミングが初めての方でも安心してください。まずは「名前」「年齢」「性別」といったシンプルなプロフィールデータ(連想配列)をJSONに変換する例を見てみましょう。
// 1. まずはPHPで配列(データのセット)を作成します
$user_data = [
"name" => "たろう",
"age" => 20,
"gender" => "男性"
];
// 2. json_encodeを使って、配列をJSON形式の文字列に変換します
$json_output = json_encode($user_data);
// 3. 結果を表示してみましょう
echo $json_output;
このコードを実行すると、画面には以下のようなテキストが表示されます。
{"name":"\u305f\u308d\u3046","age":20,"gender":"\u7537\u6027"}
ここがポイント!
出力結果に \u305f... といった記号が並んでも驚かないでください。これは「ユニコード」というコンピュータ用の文字表現で、壊れているわけではありません。後の章で「日本語をそのまま表示させる方法」も解説するので、まずは「{ }で囲まれた形になれば成功」だと覚えておきましょう。
json_encodeは、PHP側で処理した計算結果やデータベースの内容を、JavaScriptなどのフロントエンド言語に受け渡す際の「橋渡し役」として、モダンなWeb開発では欠かせない非常に重要なステップです。
3. JSON文字列を配列やオブジェクトに戻す「json_decode」の使い方
JSON形式に変換したデータを、再びPHPで扱える形に戻したいときは、json_decode(ジェイソン・デコード)という関数を使います。これは、外部から届いた「JSONという名の小包」を解いて、中身を取り出す作業に似ています。
初心者の方が特につまずきやすいポイントが、この関数の「第2引数」です。まずは、実際に「名前」や「年齢」が含まれたJSONデータをPHPの配列として読み込むコードを見てみましょう。
// 1. JSON形式のデータ(テキスト)を用意します
$json_data = '{"name":"たろう","age":20,"gender":"男性"}';
// 2. json_decodeを使って、PHPで扱える「連想配列」に変換します
// 第2引数に「true」を入れるのが、配列として扱うための魔法の合言葉です
$array_data = json_decode($json_data, true);
// 3. 中身を確認してみましょう
print_r($array_data);
// 4. 配列になれば、個別にデータを取り出すのも簡単です!
echo "こんにちは、" . $array_data['name'] . "さん!";
このコードを実行すると、次のような結果が表示されます。
Array
(
[name] => たろう
[age] => 20
[gender] => 男性
)
こんにちは、たろうさん!
初心者が忘れてはいけないポイント!
json_decode($json, true); のように、最後に true を付け忘れると、PHPでは「オブジェクト」という別の形式で扱われてしまいます。慣れないうちは、迷わず true をつけて「連想配列」として取得するのが、スムーズにプログラミングを進めるコツです。
APIなどで取得したデータは、そのままでは文字の羅列でしかありませんが、このjson_decodeを使うことで、特定の情報だけを抜き出したり、画面に表示したりといった自由な操作が可能になります。
4. 実践編:PHPでJSON変換をどんなシーンで使うの?
「配列をJSONにする方法はわかったけど、実際いつ使うの?」と疑問に思うかもしれません。現代のWeb開発において、PHPとJSONの組み合わせは「情報の運び屋」として、あらゆる場面で活躍しています。
1. 外部サービス(API)との連携
天気予報、最新ニュース、SNSの投稿データなどは、ほとんどがJSON形式で配信されています。これを受け取って自分のサイトに表示させる際に json_decode が必須となります。
2. JavaScript(フロントエンド)への受け渡し
「ボタンを押した瞬間に画面を書き換える(非同期通信)」といった動きを作る際、PHP側で用意したデータを json_encode してJavaScriptに渡すのがWeb業界の標準的な手法です。
例えば、プログラミング未経験の方でもイメージしやすい「お店のメニューを表示するシステム」を考えてみましょう。PHPで管理している複雑なメニューリストを、Webブラウザが理解しやすいJSONに変換して送り出すイメージです。
// 例:おすすめメニューのデータをJavaScriptに送る準備
$recommend_menu = [
"title" => "特製オムライス",
"price" => 1200,
"options" => ["大盛り無料", "サラダ付き"]
];
// JSON形式に変換して、JavaScriptが読み取れるように出力する
echo json_encode($recommend_menu, JSON_UNESCAPED_UNICODE);
初心者向けの補足:
このように、PHP(サーバー側)とJavaScript(ユーザーのブラウザ側)は、話す言語が少し違います。その共通言語として「JSON」という共通のフォーマットを使うことで、データのやり取りが驚くほどスムーズになるのです。
その他にも、データベースに設定情報を保存する場合や、スマホアプリ向けのデータ送信など、PHPエンジニアとして活動する上でJSONを扱わない日はありません。今のうちに基本をマスターしておきましょう!
5. JSONを扱う上での注意点とエラーを防ぐコツ
PHPでJSONを扱う際、初心者が特につまずきやすいポイントがいくつかあります。これを知っておくだけで、「動かない!」と悩む時間を大幅に減らすことができますよ。
1. 日本語の「文字化け(Unicodeエスケープ)」を防ぐ
第2章でも触れましたが、json_encodeをそのまま使うと、日本語は \u3053... という形式に変換されます。これは仕様ですが、ログを見たりデバッグしたりする際に不便です。これを解決するには、「第2引数」に魔法のオプションを追加します。
// 日本語を含む配列
$data = ["message" => "こんにちは、PHP!"];
// オプション無し:日本語が \u... 形式になる
$json_default = json_encode($data);
// JSON_UNESCAPED_UNICODEを指定:日本語がそのまま表示される
$json_pretty = json_encode($data, JSON_UNESCAPED_UNICODE);
echo "デフォルト:" . $json_default . "\n";
echo "オプションあり:" . $json_pretty;
これで、人間が見ても直感的に内容がわかる綺麗なJSONデータが出力されます。API開発などでは必須のテクニックです。
2. データが空になる?「文字エンコード」の罠
JSONは「UTF-8」という文字コードで扱うのが絶対のルールです。もし、古いシステムなどで使われている「Shift-JIS」などのデータが混じっていると、json_encodeの結果が真っ白(false)になってしまいます。データが消えてしまったときは、文字コードがUTF-8になっているか確認しましょう。
3. json_decodeが失敗する原因(構文エラー)
外部から受け取ったJSONをjson_decodeする際、カンマが足りなかったり、シングルクォート(')で囲まれていたりすると、PHPは「これは正しいJSONじゃない!」と判断して解析を諦めてしまいます。
プロの豆知識:
もし変換がうまくいかないときは、json_last_error_msg() という関数を使ってみてください。「なぜ失敗したのか」を言葉で教えてくれるので、原因特定がグッと早くなります。
- 循環参照(自分自身を指す構造):配列の中に自分自身が含まれているとエラーになります。
- 巨大なデータ:あまりに深い階層構造(ネスト)を持つデータは、処理の制限に引っかかることがあります。
6. 多次元配列(ネスト構造)も一瞬でJSONに変換!複雑なデータのまとめ方
実際のWeb開発では、「名前だけ」のような単純なデータよりも、「ユーザー情報の中に、さらに住所や注文履歴が入っている」といった階層構造(ネスト)を持つ複雑なデータを扱うことがほとんどです。
PHPのjson_encodeは、どれだけ深い階層の「多次元配列」であっても、その構造を維持したまま、コンピュータが読み取りやすい1つのJSONテキストに丸ごと変換してくれます。
プログラミング未経験の方でもイメージしやすいように、「学校のクラス名簿」のような構造を例に見てみましょう。配列の中にさらに別の配列が入っていますが、使い方は先ほどまでと全く同じです。
// クラスの中に複数の生徒がいる「多次元配列」の例
$class_data = [
"class_name" => "1年A組",
"teacher" => "佐藤先生",
"students" => [
["name" => "たろう", "age" => 13],
["name" => "はなこ", "age" => 12]
],
"is_active" => true
];
// 複雑な階層構造も、一気にJSONへ変換!
// 日本語が読みやすいように JSON_UNESCAPED_UNICODE を指定します
$json_result = json_encode($class_data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json_result;
出力結果(イメージ):
{
"class_name": "1年A組",
"teacher": "佐藤先生",
"students": [
{ "name": "たろう", "age": 13 },
{ "name": "はなこ", "age": 12 }
],
"is_active": true
}
このように、studentsという項目の中に、さらに個別のデータがまとまっているのがわかります。JSONはこの「入れ子構造」を非常に得意としており、どれだけ情報量が増えても、整理された状態で他システムへ渡すことができるのです。情報の整理整頓が、Webサービスの裏側を支えていると言っても過言ではありません。
まとめ
PHPで配列とJSON形式の変換を行う方法は、モダンなWeb開発では欠かせない基本スキルです。この記事では、json_encode関数を使ってPHPの配列をJSON文字列に変換する方法、そしてjson_decode関数を使ってJSON文字列をPHPの配列に戻す方法を丁寧に解説しました。特に、配列の中に配列が入っている「多次元配列」でも対応できる点や、日本語の文字化けを防ぐためにJSON_UNESCAPED_UNICODEオプションを使うテクニックなど、実務でも役立つポイントを押さえました。
JSONはJavaScriptとの連携だけでなく、外部APIとの通信、Ajaxの非同期処理、データベースへの構造的データ保存など、PHPを使ったWebアプリケーション開発のあらゆる場面で使われています。そのため、配列からJSONへの変換、JSONから配列への変換という基本操作をしっかりと理解しておくことが大切です。
また、json_decodeを使うときは第2引数にtrueを渡すことで「連想配列」として扱えるようになります。この点は、オブジェクトとして返る仕様と区別して覚えておきましょう。
実務でもよく使うJSON変換のサンプルコード
ここでもう一度、基本となる書き方を確認しておきましょう。
$data = [
"名前" => "さくら",
"年齢" => 25,
"職業" => "エンジニア"
];
// JSON形式に変換(日本語対応)
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $json;
// 出力: {"名前":"さくら","年齢":25,"職業":"エンジニア"}
// JSONから配列に戻す
$decoded = json_decode($json, true);
print_r($decoded);
このように、PHPで配列とJSONを自由に変換する方法を身につけておくと、データ連携・API通信・JavaScriptとのやりとりなど、さまざまな場面に対応できるようになります。PHP初心者にとっても、難しい文法ではなく、実用的で学びがいのある機能です。
最初はJSONの中かっこやコロンに戸惑うかもしれませんが、実際にPHPで試していくうちに自然と理解が深まっていきます。今後の学習やWebアプリ開発に役立ててください。
生徒
「PHPで配列をJSONに変換する方法がやっとわかってきました!json_encodeで文字列にして、json_decodeで配列に戻すってシンプルなんですね!」
先生
「その通りです。特にJSONはJavaScriptとデータをやり取りするのに最適な形式なので、PHPでもよく使われますよ。」
生徒
「文字化けの対策としてJSON_UNESCAPED_UNICODEを使うのも知れてよかったです。日本語を扱うときは必須なんですね。」
先生
「はい、そこは意外と見落としやすいポイントです。今後、API通信やJavaScriptとの連携をするときに必ず役立ちますよ。」
生徒
「これでWebアプリの開発にも挑戦できそうです。配列やJSONがこんなに便利だとは思いませんでした!」
先生
「ぜひどんどん使ってみてください。シンプルなコードでも、しっかり動かせると理解が深まりますよ。」