LoginSignup
4
2

More than 5 years have passed since last update.

[PHP]オブジェクト配列のjsonをcsvに変換する

Last updated at Posted at 2018-06-08

バージョン

PHP 5.2.1 (cli) (built: May 28 2007 19:31:00)

コード

json2csv.php
<?php
ini_set("memory_limit", "512M");
$str = file_get_contents("json.txt");
$json = json_decode($str, true);
$fp = STDOUT;
$columns = array();
foreach ($json as $fields) {
    if (empty($columns)){
        $columns = array_keys($fields);
        fputcsv($fp, $columns);
    }

    $contents = array();
    foreach($columns as $column) {
        $contents[] = isset($fields[$column]) ? $fields[$column] : "";
    }
    fputcsv($fp, $contents);
}

解説

json.txtに保存されたオブジェクト配列のjson形式文字列をすべてメモリに読み込んでcsvとして標準出力に出力します。

sample.json
[
  {"key1":"value1","key2":"value2"},
  {"key1":"value1","key2":"value2"}
]

ini_set("memory_limit", "512M");
memory_limitは扱いたいjsonの量によって変わるので適宜変更します。
障害対応で書いたソースコードのため、メモリのことは特に考えていません。
なので、あまりにも巨大なjsonは扱うことができません。

$fp = STDOUT;
調べたら上記のコードが出てきたので、初めてSTDOUTを指定しましたが、楽で良いですね。
軽いものならそのまま出しても良いし、実行時に出力先を変えられるし楽です。
php json2csv.php > result.csv

    if (empty($columns)){
        $columns = array_keys($fields);
        fputcsv($fp, $columns);
    }

上記のコードでは、1番目のobjectからヘッダー行を取得しています。
そこからマッピングして組み立てています。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2