-
-
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
jsonToCsvhas 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!