何かとデータを扱う場合に使用する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で繰り返しこちらが意図したとおりに表示させて完了です。
コメント