Parse允许用户使用其“导出”工具下载数据,但只允许以JSON格式导出数据。我想将其转换为CSV格式以在Excel中进行分析。
对于较小的JSON对象,简单的脚本就足够了,但我处理的数据集有670,000行,超过360MB。在线转换器无法处理此文件大小,经常引用PHP已超出其内存限制。
我尝试过基于PHP CLI的脚本和在线转换器,但它们似乎都超出了其分配的内存。当
我目前正在使用这个基于CLI的脚本来解析数据:
对于较小的JSON对象,简单的脚本就足够了,但我处理的数据集有670,000行,超过360MB。在线转换器无法处理此文件大小,经常引用PHP已超出其内存限制。
我尝试过基于PHP CLI的脚本和在线转换器,但它们似乎都超出了其分配的内存。当
ini_set('memory_limit', '4096M');
仍然没有给我足够的内存时,我意识到我需要一种新的方法。我目前正在使用这个基于CLI的脚本来解析数据:
// flatten to CSV
function flatten2CSV($file){
$fileIO = fopen($file, 'w+');
foreach ($this->dataArray as $items) {
$flatData = array();
$fields = new RecursiveIteratorIterator(new RecursiveArrayIterator($items));
foreach($fields as $value) {
array_push($flatData, $value);
}
fputcsv($fileIO, $flatData, ";", '"');
}
fclose($fileIO);
}
// and $this->dataArray is created here
function readJSON($JSONdata){
$this->dataArray = json_decode($JSONdata,1);
$this->prependColumnNames();
return $this->dataArray;
}
private function prependColumnNames(){
foreach(array_keys($this->dataArray[0]) as $key){
$keys[0][$key] = $key;
}
$this->dataArray = array_merge($keys, $this->dataArray);
}
如何解决使用PHP处理大型数据集时的内存管理问题?有没有比使用json_decode
更好的读取JSON对象的方法?