-
-
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)); | |
} | |
?> |
please advise..what comes in place of the red lines. I am not a programmer and really need help.
all i get as the out is The json file name or URL is missed!!!!
array_keys() expects parameter 1 to be array, string given in convert.php on line 40
json input
from facebook
{
"id": "15606624099",
"first_name": "Abdpel",
"gender": "male",
"last_name": "El Gulessab",
"locale": "fr_FR",
"name": "Abdel El Guessab",
"username": "zdd.elguessab"
}
Seems to work perfectly!!! Thank.
Thanks for your work
great! work fast.
how can filter some raw with some expression? for exp. - gender=male and locale=fr_FR?
Error:
Warning: Invalid argument supplied for foreach()
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!
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
Works like a charm, thanks!