Skip to content

Instantly share code, notes, and snippets.

@Kostanos
Created May 24, 2013 03:28
Show Gist options
  • Save Kostanos/5641110 to your computer and use it in GitHub Desktop.
Save Kostanos/5641110 to your computer and use it in GitHub Desktop.
Convert JSON array file to CSV. Use the array keys as the first row. Command line using: json-to-csv.php json.filename > csv.filename
#!/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));
}
?>
@t1maccapp
Copy link

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

@elazdins
Copy link

elazdins commented Aug 3, 2016

Thanks for this! Modified the script to work with variable length json entries:

https://gist.github.com/elazdins/a2cfbea9c23fd039e680602de5133a34

@clesauln
Copy link

Thanks, i have adapted this converter to parse Point and properties to csv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment