PHP Library to convert JSON to CSV?

独自空忆成欢 提交于 2019-12-30 04:33:08

问题


I've got a JSON service and need to create a script to export data to CSV files. Does anyone have a method or library you can suggest to migrate JSON to CSV format?

Here's an example format though I expect to have to retro-fit the solution to work with it:

{"service_name":
      { key : value, key : value....}
}

or:

{"service_name":
        [
               { key : value, key : value....},
               ...
         ]
}

回答1:


i generally agree with the commenters, but if you're data is prepared this way, isn't this pseudo-code all you need?

$json_str = "{'aintlist':[4,3,2,1], 'astringlist':['str1','str2']}";

$json_obj = json_decode ($json_str);

$fp = fopen('file.csv', 'w');

foreach ($json_obj as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);



回答2:


Something like this should work, assuming your JSON is an array of data sets without arrays or embedded objects:

$file = file_get_contents('http://example.com/blah/blah');
$json = json_decode($file);

$csvfile = fopen('file.csv', 'w+');
foreach ($json as $row) {
    $line = "'" . join("\",\"", $row) . "\"\n";
    fputs($csvfile, $line);
}
fclose($csvfile);

You'll have to add appropriate error handling. There are a lot of things that can go wrong when trying to do this sort of thing (i.e. JSON file not available or is malformatted, can't create new CSV file)




回答3:


I just needed to do the same. I wrote the small command line script, which take as a parameter the json file and output the CSV.

You can check it here: PHP Converting JSON array to CSV

The important staff there is using keys of array as the first row in CSV file. And maintaining the order on the next elements, to not mess up the CSV.

Here is the code:

if (empty($argv[1])) die("The json file name or URL is missed\n");
$jsonFilename = $argv[1];

$json = file_get_contents($jsonFilename);
$array = json_decode($json, true);
$f = fopen('php://output', 'w');

$firstLineKeys = false;
foreach ($array as $line)
{
    if (empty($firstLineKeys))
    {
        $firstLineKeys = array_keys($line);
        fputcsv($f, $firstLineKeys);
        $firstLineKeys = array_flip($firstLineKeys);
    }
    // Using array_merge is important to maintain the order of keys acording to the first element
    fputcsv($f, array_merge($firstLineKeys, $line));
}


来源:https://stackoverflow.com/questions/9573421/php-library-to-convert-json-to-csv

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!