PHPでJSONファイルに書き出す・JSONファイルを読み込む

何かとデータを扱う場合に使用するJSONですが、今回はPHPでJSONファイルに配列を書き出すのと、読み込んで整形して表示するというのをやってみたいと思います。

JSONファイルを書き出す

まずは書き出し。JSONにしたいデータを配列にして作り、書き出します。今回は以下のソースのようなJSONを書き出します。実際に書き出すPHPは下部の2行だけなので簡単です。

PHPソース

<?php
$arr = array(
    "res" => array(
        "blogData" => array([
            "author" => "鈴木",
            "days" => array([
                "day" => "01",
                "month" => "01",
                "year" => "2000"
            ]),
            "id" => "1",
            "content" => "1の内容内容内容内容内容内容内容内容内容内容内容内容",
            "category" => array(
                "日記"
            ),
            "title" => "タイトル1"
        ],
        [
            "author" => "田中",
            "days" => array([
                "day" => "02",
                "month" => "01",
                "year" => "2010"
            ]),
            "id" => "2",
            "content" => "2の内容内容内容内容内容内容内容内容内容内容内容内容",
            "category" => array(
                "旅行"
            ),
            "title" => "タイトル2"
        ])
    )
);
$arr = json_encode($arr);
file_put_contents("test.json" , $arr);
?>

最後の2行「$arr = json_encode($arr);」でjson形式にエンコードして、「file_put_contents」を使ってファイルを書き出します。

JSONファイルを読み込んで表示させる

今度はJSONファイルを読み込みます。JSONファイルの中身は先程JSONファイルとして書き出した内容とします。

JSONファイル

{
    "res": {
        "blogData": [
            {
                "author": "鈴木",
                "category": [
                    "日記"
                ],
                "content": "1の内容内容内容内容内容内容内容内容内容内容内容内容",
                "days": [
                    {
                        "day": "01",
                        "month": "01",
                        "year": "2000"
                    }
                ],
                "id": "1",
                "title": "タイトル1"
            },
            {
                "author": "田中",
                "category": [
                    "旅行"
                ],
                "content": "2の内容内容内容内容内容内容内容内容内容内容内容内容",
                "days": [
                    {
                        "day": "02",
                        "month": "01",
                        "year": "2010"
                    }
                ],
                "id": "2",
                "title": "タイトル2"
            }
        ]
    }
}

以下が読み込む側のPHPです。

<?php
$jsonUrl = "test.json"; //JSONファイルの場所とファイル名を記述
if (file_exists($jsonUrl)) {
	$json = file_get_contents($jsonUrl);
	$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
	$obj = json_decode($json, true);
	$obj = $obj["res"]["blogData"];
	foreach($obj as $key => $val) {
		echo "<div class='box' style='margin: 0 0 40px'>";
		echo "<p>".$val["title"].
		" カテゴリ:".$val["category"][0].
		"</p>";
		echo "<p>名前: ".$val["author"].
		"</p>";
		echo "<p>日付:".$val["days"][0]["year"].
		"年 ".$val["days"][0]["month"].
		"月 ".$val["days"][0]["day"].
		"日</p>";
		echo "<p>内容: ".$val["content"].
		"</p>";
		echo "</div>";
	}
} else {
	echo "データがありません";
}
?>

まず「file_exists」を使ってファイルがあるかどうか確認し、なかったら「データがありません」と出力させます。こうしないとPHPのエラー文が表示されてしまうので注意。その後は

  • 「file_get_contents」でファイルを読み込む
  • 「mb_convert_encoding」で文字化けしないようにエンコード
  • json_decodeでエンコードされた文字列を受け取り、それをPHPの変数に変換へ。

最後は値を指定してforeachで繰り返しこちらが意図したとおりに表示させて完了です。

コメント

タイトルとURLをコピーしました