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

PHP

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