Skip to main content

JSONとPHP

JSONのファイル形式について

JSONとは、テキストファイルの中にデータを保存し、整理するための方法である。ウェブアプリケーションでよく使われていて、クライアントとサーバーの間でデータをやりとりするときによく使われる。

JSONファイルの中では、辞書(連想配列)と添字付き配列を組み合わせてデータを保存する。JSONでは辞書のことを「オブジェクト」と呼ぶので、注意してほしい。

オブジェクト(Object)

オブジェクトとは、キーと値のペアをコンマで区切って集めたもので、下のように中かっこ({ })の中に書く。

{
    "key 1" : "value 1",
    "key 2" : "value 2",
    ...
    "key n" : "value n"
}

ここで「キー」は必ず文字列(引用符で囲んで書く)であり、「値」は次のいずれかの種類になる。

文字列(引用符で囲む)

"player_name" : "ウルトラマン"
整数
 "XP" : 12345
浮動小数点数(小数)
"distance" : 31.145
真偽値(true / false)
"success" : true
ほかのオブジェクトや配列
"item_data" : 
  { 
    "name:" : "魔法のマント",
    "cost"  : 300
  }

配列(Array)

配列とは、順番に並んだ値の集まりで、ふつうは同じ種類の値が入る。配列は角かっこ([ ])を使って定義する。

[
  "Apple", 
  "Banana", 
  "Grape"
]

JSONでは、同じ配列の中に違う種類の値を混ぜることもできる。少し変に見えるかもしれないが、これも可能である。

[
  "Apple", 
  25, 
  false
]

JSONファイルは必ず、中かっこ(オブジェクトとして)か、角かっこ(配列として)のどちらかから始まる。この授業では、わかりやすいのでオブジェクトから始める形を使っていく。

セーブデータを扱うJSONを考えてみよう。日付、XP、HP、そしてクリアしたステージのリストを保存したいとする。すると、下のようになる。

{
	"save_date" : "2026-07-14",
	"save_time" : "11:45",
	"XP" : 54796
	"HP" : 97.15
	"stage_cleared" : [true, true, false, false, true, false]
}

JSONとPHPのデータ変換

JSONはウェブの場面でよく使われるため、PHPには次の2つの関数が用意されている。ひとつはPHPの連想配列をJSONのテキストに変換する関数、もうひとつはその逆の変換をする関数である。

PHPの連想配列からJSONテキストへ
$json = json_encode($dictionary);
JSONテキストからPHPの連想配列へ
$dictionary = json_decode($json, true);

練習

ここまで見てきたことを使って、簡単な練習をしてみよう。

  • このJSONファイルをダウンロードし、自分のパソコンのXAMPPウェブサーバー(C:\xampp\htdocs)の中に置いてください。
  • PHPの命令 file_get_contents を使って、このJSONファイルを読み込んでください(教科書80ページ)。
  • save_datesave_time を、今の日付と時刻に変更してください(教科書40ページ)。
  • 3つ目のステージ(インデックス2)をクリア済みにしてください(trueにする)。
  • もう一度JSONのテキストに変換してください。
  • ブラウザに表示されるように、そのJSONテキストを出力してください。
test_json.php
<?php	
	// JSONを読み込む(テキスト)
	$json = file_get_contents("save_slot.json");

	// PHPの連想配列へ変換
	$data = json_decode($json, true);
	
	// 現在の日時にする
	$data["save_date"] = date("Y-m-d");
	$data["save_time"] = date("H:i:s");
	
	// 3つ目のステージをクリアにする
	$data["stage_cleared"][2] = true;
	
	// またJSONへ
	$json = json_encode($data);
	
	// 表示(返す)
	print($json);
?>

 

JSONだと明示して返す

初期設定では、Apache(ウェブサーバー)は結果をHTMLファイルだと思い込んでいて、ブラウザにも「HTMLファイルが来る」と伝えてしまう。これは「ヘッダー」というものを使って行われていて、その中でデータの種類が指定されている。これはMIMEタイプと呼ばれるもので、一覧はリンク先で見ることができる。

今回は、結果がHTMLファイルではなくJSONファイルであることをブラウザに伝えたい。これは、PHPの header() という命令を使うことでできる。

// JSONを返すべき
header("Content-Type: application/json; charset=utf-8");

先ほどの練習でヘッダーを変えてみて、結果がどう変わるか確認してください。