-
-
Save Kostanos/5641110 to your computer and use it in GitHub Desktop.
#!/usr/bin/php | |
<?php | |
/* | |
* Convert JSON file to CSV and output it. | |
* | |
* JSON should be an array of objects, dictionaries with simple data structure | |
* and the same keys in each object. | |
* The order of keys it took from the first element. | |
* | |
* Example: | |
* json: | |
* [ | |
* { "key1": "value", "kye2": "value", "key3": "value" }, | |
* { "key1": "value", "kye2": "value", "key3": "value" }, | |
* { "key1": "value", "kye2": "value", "key3": "value" } | |
* ] | |
* | |
* The csv output: (keys will be used for first row): | |
* 1. key1, key2, key3 | |
* 2. value, value, value | |
* 3. value, value, value | |
* 4. value, value, value | |
* | |
* Uses: | |
* json-to-csv.php file.json > file.csv | |
*/ | |
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)); | |
} | |
?> |
Ok, if you see an error "Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes) in ..." just add this line after comments block and specify amount of ram you need.
ini_set('memory_limit', '512M');
Also if you have an error like "Error: Warning: Invalid argument supplied for foreach()" try to validate your json file. I used this https://www.npmjs.com/package/jsonlint (It worked with 100+ MB json file)
And if you have troubles trying to convert json file from mongoexport and it fails then check this link http://stackoverflow.com/questions/28206472/bson-produced-by-mongoexport-from-mongodb-is-not-a-valid-json
btw, thanks for this script
Thanks for this! Modified the script to work with variable length json entries:
https://gist.github.com/elazdins/a2cfbea9c23fd039e680602de5133a34
Thanks, i have adapted this converter to parse Point and properties to csv
Created a fork to make this a PHP function that can be included in other PHP files.
Here's the new gist: https://gist.github.com/jakebathman/4fb8c55b13272eee9c88
The new function
jsonToCsv
has a few new options, including outputting the CSV file to the browser or echoing the CSV string to the browser window.Thanks for the good foundation!