我正在使用PHP,并将JSON数据转换为CSV格式,以后再读取相同的CSV文件以进行进一步处理。
下面是我的代码,它将JSON数据转换为CSV格式。
function LoadDataFromFile($file)
{
$json = file_get_contents($file);
$array = json_decode($json, true);
$f = fopen('out.csv', 'w');
$firstLineKeys = false;
$keys = array();
//first collect keys
foreach($array as $line){
foreach($line as $key => $value){
if(!in_array($key, $keys))
$keys[] = $key;
}
}
$keyString = implode(",", $keys);
fwrite($f, "$keyString\n");
foreach ($array as $line)
{
$outputArray = array();
foreach($keys as $key){
if(array_key_exists($key, $line)){
$outputArray[] = str_replace(',', '', $line[$key]);;
} else {
$outputArray[] = "";
}
}
$outputString = implode(",", $outputArray);
fwrite($f, "$outputString\n");
}
fclose($f);
}
我们可以看到,我正在将数据写入“ out.csv”文件中,随后我正在读取相同的CSV文件,并将同一文件的值/全部内容逐行分配给$ array变量,如下所示。
$array = explode("\n", file_get_contents('out.csv'));
现在,我想不使用中间“ out.csv”文件而直接将csv内容的值分配给$ array变量。
想知道在将JSON数据转换为CSV格式时应该使用什么数据结构,以及“ LoadDataFromFile”方法可能需要更改代码吗?
答案 0 :(得分:1)
如果您已经可以将json转换为csv,则只需将分配给字符串变量的输出字符串附加到一起,而不是将其写入文件。还是我误会了你想要什么?
代替:
fwrite($f, "$outputString\n");
您可以放置:
$csv .= $outputString;
并完成以下操作:
$array = explode("\n", $csv);