PHPでJSONデータを扱う方法をやさしく解説!初心者でもわかるjson_encodeとjson_decode
生徒
「PHPでデータをやり取りするときにJSONって聞いたことがありますが、どうやって使うんですか?」
先生
「JSONはデータの形を決める方法のひとつで、PHPでもよく使われています。特にAPIという仕組みで使われることが多く、json_encodeとjson_decodeという関数を使えば簡単に扱えますよ。」
生徒
「APIって何ですか?あと、JSONって文字列なんですか?」
先生
「APIは、プログラムどうしが情報を交換する仕組みです。そこで使われるのがJSONというデータ形式で、人間にも機械にも読みやすくできています。今日はその基本をじっくり見ていきましょう。」
1. JSONとは何か?初心者でもわかるように説明
JSON(ジェイソン)は、プログラム同士が情報を交換するときに利用される「データを入れるための入れ物」のような仕組みです。名前と値をセットにして扱えるため、人間にもコンピュータにも理解しやすい形になっています。PHPだけでなく、JavaScriptやPythonなど多くの言語で共通して使えるため、Webサービスやアプリ開発で非常に重宝されます。たとえば、通販サイトの商品情報やSNSの投稿内容など、画面に表示されるデータの多くがJSONという形式で送られています。
JSONの構造はとてもシンプルで、「名前:値」を並べて表現します。値には文字、数字、真偽値、配列、さらに入れ子のデータを使うこともできるため、複雑な情報でもきれいに整理できます。以下は、JSONの形をイメージしやすくするための、とても簡単なサンプルです。
{
"name": "たろう",
"age": 18,
"likes": ["りんご", "サッカー"]
}
このように、文字だけでまとめられているため目で見て理解しやすく、データの確認もしやすいのが特徴です。PHPでは、このJSONを作ったり、逆に読み取ったりするための関数として「json_encode」と「json_decode」が用意されています。初心者の方はまず、JSONが“情報を交換するための共通の形”だと理解しておくと、この後の学習がぐっと分かりやすくなるでしょう。
2. json_encodeでPHPの配列をJSON文字列に変換する
json_encodeは、PHPで作成した配列やオブジェクトを「JSON形式の文字列」に変換するための関数です。JSONは見た目こそ文字列ですが、その中には整理されたデータがしっかり詰まっています。たとえば、Webブラウザやスマホアプリへ情報を渡したいとき、PHP側のデータをこのjson_encodeで整えて送ることで、どんな言語でも読み取れる共通フォーマットに変換できます。初心者の方でも「PHPの配列 → JSON文字列」という単純な変換作業だとイメージすると理解しやすくなります。
<?php
$data = ["name" => "たろう", "age" => 18];
$json = json_encode($data);
echo $json;
?>
このサンプルでは、PHPの配列が{"name":"たろう","age":18}のようなJSON文字列に変換され、画面にそのまま表示されます。データが文字列化されることで、他のプログラムが読みやすい状態になり、API通信にも利用しやすくなるのが特徴です。特にアプリやJavaScriptとデータを交換するときは、この決まった形式で出力することが重要になります。なお、日本語が含まれる場合に文字化けが起きることもありますが、基本を理解したうえで必要なオプションを追加していけば安心して扱えるようになります。
3. json_decodeでJSON文字列をPHPのデータに変換する
外部のAPIから送られてくるデータは、多くの場合JSONという文字列の形になっています。しかし、そのままではPHPの配列として扱えないため、プログラムが理解できる形に“開封”する必要があります。その役割を担うのが json_decode です。イメージとしては「文字として届いた荷物を、PHPが使える配列に戻す作業」であり、初心者でも使い方を覚えればすぐに実践できます。特に画面表示やデータ処理を行うときは、この変換ステップがとても重要になります。
<?php
$json = '{"name":"たろう","age":18}';
$data = json_decode($json, true);
echo $data["name"];
?>
この例では、JSON形式の文字列を json_decode で配列へ変換し、その中から「たろう」という値を取り出しています。第2引数に true を指定すると、PHPの連想配列として扱えるようになるため、初心者にはこちらの書き方がとても分かりやすいでしょう。反対に false を指定するとオブジェクト型になりますが、こちらは慣れてから覚えれば十分です。API連携や外部サービスとのデータ交換では必ずといっていいほどJSONの受け取りが登場するため、json_decode の仕組みをしっかり理解しておくことで、PHPで扱える情報の幅が格段に広がります。
4. JSONを使うと何が便利なのかを初心者向けに説明
JSONが多くの場面で利用されている最大の理由は、その「扱いやすさ」と「どんな言語でも使える汎用性」にあります。データがすべて文字として表現されるため、インターネットで送受信するときに無駄が少なく、通信量も抑えられます。また、PHP・JavaScript・Python・スマホアプリなど、異なる環境でも同じ書き方で理解できるため、データ交換のルールとして自然と広まりました。例えば、ニュースアプリや天気アプリも裏側ではAPIを通してJSONを受け取り、それを画面に表示していることがほとんどです。
JSONのもう一つの大きな魅力は、そのシンプルな構造です。「名前: 値」を並べるだけなので、初めて学ぶ人でも直感的に理解しやすく、仕組みをイメージしながら学べます。実際の開発現場では、ユーザー情報、商品一覧、注文履歴などあらゆるデータ管理に使われており、Webサービスに欠かせない存在です。初心者の方でも、まずJSONの読み書きに慣れておけば、API開発やアプリとの連携を学ぶ際に大きな助けになります。以下は、JSONの構造をより身近に感じてもらうための簡単な例です。
{
"product": "ノート",
"price": 120,
"inStock": true
}
このように、名前と値がセットになっただけのシンプルな形でありながら、人間にも機械にも読みやすいという特徴があります。JSONを理解することは、PHPだけでなくWeb全体を理解する大きな一歩と言えるでしょう。
5. PHPでAPI開発するときのJSON利用例
PHPを使ったAPI開発では、ブラウザやスマホアプリとデータをやり取りする際にJSONが中心的な役割を果たします。PHPがデータベースから取得した情報を json_encode を使ってJSONに変換すれば、アプリ側が理解しやすい形式で受け取れるようになります。逆に、アプリから送られてきたデータもJSONで届くため、PHP側では json_decode を使って内容を取り出し、保存処理や更新処理につなげていきます。この一連の流れを覚えることで、Webサービスの裏側でどのようにデータが動いているのかが自然とイメージできるようになります。
<?php
// PHPがAPIとしてJSONデータを返す簡単な例
header("Content-Type: application/json; charset=utf-8");
$response = [
"status" => "success",
"message" => "データ取得が正常に完了しました",
"time" => date("H:i:s")
];
echo json_encode($response, JSON_UNESCAPED_UNICODE);
?>
このサンプルでは、APIとしてPHPがJSONを返すもっとも基本的な形を示しています。実際にブラウザで実行すると、{"status":"success","message":"データ取得が正常に完了しました"} といったJSONが表示されます。アプリ側はこれを受け取り、画面の表示に使ったり、次の処理へとつなげたりします。こうしたデータ交換がスムーズに行えるのは、JSONが言語に依存しない共通フォーマットだからです。初心者の方も、まずはこの小さなAPIの仕組みを理解することで、後により複雑なAPI設計へと自然にステップアップしていけます。
6. json_encodeで日本語をきれいに出力するコツ
PHPでjson_encodeを使うと、日本語の文字が「\uXXXX」という記号のような形で表示されてしまうことがあります。これはコンピュータが内部的に文字を安全に扱うための仕組みですが、実際に人が画面で確認する際には非常に読みにくく感じてしまいます。特に初心者の方は「正しく動いていないのでは?」と不安になることも多いため、日本語を見やすく整えて表示する方法をあらかじめ知っておくと安心してJSONを扱えるようになります。
そんなときに役立つのが json_encode の第2引数に指定できるオプションです。代表的なものが、マルチバイト文字をそのまま出力する JSON_UNESCAPED_UNICODE と、見やすく整形してくれる JSON_PRETTY_PRINT の2つです。この2つを組み合わせることで、日本語がそのまま画面に表示され、さらに改行とインデントが加わってとても読みやすいJSONになります。デバッグ作業でも大いに役立つため、初心者の段階で覚えておくと後の学習がスムーズになります。
<?php
// 日本語を含むデータを見やすいJSONで出力する例
$data = [
"name" => "さくら",
"age" => 20,
"message" => "こんにちは、JSONの表示をきれいに整えています。"
];
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;
?>
このサンプルを実行すると、日本語の文字がそのまま表示され、さらに行ごとに整えられた読みやすいJSONが出力されます。通常のjson_encodeに慣れてきたら、開発中はこうしたオプションを活用してデータの見やすさを整えると作業効率が大きく向上します。特にAPI開発の場面では、返されるJSONを読みやすくしておくことで、どこにどんなデータが入っているのかを瞬時に理解できるようになり、トラブルの早期発見にもつながる便利なテクニックです。
7. json_decodeで入れ子になったJSONデータを扱う方法
JSONは一見シンプルに見えますが、実際には配列やオブジェクトを何層にも重ねて表現できる柔軟なデータ形式です。そのため、ユーザー情報の中に住所やプロフィール、さらにその中に細かい項目が含まれるといった「入れ子構造」がよく登場します。PHPで json_decode を使うと、この入れ子になったデータを連想配列として扱えるようになり、必要な値を段階的に取り出せるようになります。最初は複雑に見えても、ひとつずつ階層をたどるイメージを持つと理解しやすくなります。
たとえば、ユーザー情報の中に「住所」があり、さらにその中に「都道府県」や「市区町村」が入っているケースを考えてみましょう。json_decodeで配列に変換すれば、配列のキーを順番に追っていくだけで目的の項目にアクセスできます。紙にデータ構造を書き出したり、print_rで確認しながら作業すると、入れ子の関係が自然と読み取れるようになります。初心者の方は「外側から内側へ、階段を降りるようにキーをたどる」イメージを持つと理解がかなり楽になります。
<?php
// 入れ子になったJSONデータの例
$json = '{
"name": "たろう",
"profile": {
"age": 18,
"address": {
"pref": "東京",
"city": "新宿",
"zip": "160-0022"
}
}
}';
// JSONを連想配列に変換
$data = json_decode($json, true);
// 市区町村名だけを取り出す
$city = $data["profile"]["address"]["city"];
echo $city; // 「新宿」と表示される
?>
このサンプルでは「name → profile → address → city」という順番でキーをたどることで、「新宿」という値を取得しています。慣れてくると、どれだけ複雑な入れ子でも迷わずアクセスできるようになります。入れ子構造は多くのAPIで使われるため、初めのうちに仕組みをしっかり理解しておくと、データ処理の幅が大きく広がり、実践的なPHPの扱いにも強くなっていきます。
8. PHPとJavaScriptでJSONデータをやり取りするイメージ
PHPとJavaScriptの連携では、JSONが“共通の言語”として活躍します。たとえば「ボタンを押すと最新の情報が表示される」という仕組みは、JavaScriptがPHPにリクエストを送り、PHPがJSON形式でデータを返し、その結果をJavaScriptが画面へ反映することで実現されています。JSONは文字だけで構成されたデータのため、ブラウザとサーバーの間で軽くスムーズにやり取りでき、動きのあるWebページを作るときに欠かせない存在です。
初心者の方はまず、PHPがどうやってJSONを返し、JavaScriptがそれをどのように受け取るのかを小さな例で確認すると理解が進みます。「PHP側はデータをjson_encodeでまとめて返す」「JavaScript側は受け取ったJSONを元に画面を更新する」という流れがわかれば、後から出てくる非同期通信の学習もスムーズになります。以下は、PHPがJSONデータを返す最もシンプルな例です。
<?php
// JavaScriptから呼び出されるPHPのサンプル
header("Content-Type: application/json; charset=utf-8");
$items = [
["id" => 1, "name" => "りんご"],
["id" => 2, "name" => "みかん"],
["id" => 3, "name" => "ぶどう"]
];
echo json_encode($items, JSON_UNESCAPED_UNICODE);
?>
実行すると、果物の一覧がJSON形式で返されます。JavaScript側ではこのデータを配列として扱い、一覧を表示したりフィルタリングしたりといった操作が自由に行えます。PHPで扱ったデータがそのままJavaScriptでも使える、という柔軟さがJSONの強みです。この基本を一度理解してしまえば、より複雑なAPI連携や動的な画面更新にも自然と応用できるようになります。
まとめ
PHPでJSONを扱う技術は、これからWeb開発を学ぶ人にとって必ず身につけておきたい重要な知識です。とくに、PHPとAPIが組み合わさる場面では、json_encodeとjson_decodeという二つの関数が欠かせません。これらは単に文字列を変換するだけではなく、PHPの配列やオブジェクトを別のプログラムと共有するための架け橋のような役割を果たします。初心者にとって「データ形式」という言葉は難しく感じられるかもしれませんが、JSONは人が読んでも理解しやすい形をしているため、学習が進むほど扱いやすい存在になっていきます。また、現代のウェブサービスでは商品情報、会員データ、ログデータ、検索結果など、多くの情報がJSONで送受信されており、PHPの中でスムーズに扱うためには正確な知識が求められます。
JSONが広く使われる理由のひとつは、多くのプログラミング言語で共通して扱えるという点です。これは、PHPで作ったAPIをJavaScriptやスマートフォンアプリとつなぐ際に非常に便利です。それぞれが別々の言語で作られていても、JSONという共通の「言葉」でやり取りできるため、データ通信がとても分かりやすく整理されます。JSONは構造が単純なため、初心者でもルールさえ覚えてしまえば難しく感じることはありません。名前と値を並べていくだけでさまざまなデータを表現できるので、PHPプログラムにもすぐに応用できます。特にAPI開発では、送るデータをjson_encodeで整え、受け取ったデータをjson_decodeで読み取るという流れが基本になるため、この二つを理解しておくことで実践的なスキルが身につきます。
実際にPHPでJSONを扱う際には、正確なデータ構造を意識することが大切です。例えば、配列と連想配列の違いを理解しておくと、json_decodeで「配列にする」か「オブジェクトにする」かを使い分けることができます。また、日本語を含むデータを扱うときは文字化けの対策も意識する必要があります。こうした細かな知識を積み重ねることで、より安全で正確なデータ処理ができるようになります。API開発では、ただデータを返すだけではなく、エラーの扱い方、通信の状態、受信したデータの妥当性など、多くの要素が関係します。JSONの扱いに慣れてくると、これらの構造が理解しやすくなり、PHPの可能性が広がっていきます。
最後に、実用的なPHPプログラムのイメージをつかむために、JSON処理をひとまとめにしたサンプルを次に紹介します。これはPHPでAPIを作る際の基本的な流れを再現したものです。JSONを作り、データとして返し、必要に応じて受け取ったJSONを処理するという一連の仕組みを理解すると、今日の内容がより深く結びつくはずです。
サンプルプログラム(まとめ)
<?php
header("Content-Type: application/json; charset=utf-8");
// データの準備
$user = ["name" => "はなこ", "age" => 25, "city" => "東京"];
// JSONへ変換
$json = json_encode($user);
// データを返す
echo $json;
// JSONを受け取ったと仮定して処理
$received = json_decode($json, true);
$city = $received["city"];
?>
このコードでは、配列をJSON文字列に変換して返す流れと、そのJSONを再びPHPで扱う方法をまとめて確認できます。この処理を理解できれば、実際のAPI開発でも応用できる力がつきます。JSONは単純な構造でありながら拡張性が高いため、慣れれば扱えるデータの幅も広がり、さらに多くのサービスと連携できるようになります。PHPを使ったWeb開発の世界では、JSONは欠かせない存在です。基本をしっかり押さえておくことで、自分の作りたいサービスをより自由に形にすることができ、開発の楽しさも大きく膨らみます。
生徒
「今日の内容で、PHPとJSONのつながりがよく分かりました。配列をそのまま送れない理由も理解できました。」
先生
「その調子です。PHPで扱っている配列やオブジェクトは、他のプログラムから見るとそのままでは意味が分かりません。だからこそ、共通の形式であるJSONが大切なんです。」
生徒
「json_encodeでデータを整えて、json_decodeで受け取ったデータを使える形に戻すんですね。APIの仕組みも少しイメージできました。」
先生
「理解が深まってきていますね。実際の開発でもこの流れが基盤になります。慣れてくればより複雑なデータ構造にも対応できるようになりますよ。」
生徒
「まずは今日のコードを動かして、実際にJSONの変換を体験してみます!」