1. TOPページに戻る
  2. PHP
  3. PHPでJSONファイルに書き出す・JSONファイルを読み込む

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

  • 2016年08月10日

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