在 PHP 中 JSON 数组导出为 CSV

Posted

技术标签:

【中文标题】在 PHP 中 JSON 数组导出为 CSV【英文标题】:JSON Array Export to CSV in PHP 【发布时间】:2016-03-21 18:41:52 【问题描述】:

我正在尝试导出为 csv,即具有以下格式的 JSON:

$json_file2
            "errors":
                    
                    "code":0,
                    "text":""
                    ,
            "results":
                    
                    "resultado":
                    [
                        
                        "referencia":"00000",
                        "cantidad":"24",
                        "cantidad_proveedor":null,
                        "delivery_time":"delivery time 2 days"
                        ,
                        
                        "referencia":"00001",
                        "cantidad":"24",
                        "cantidad_proveedor":"48",
                        "delivery_time":""
                        ,
                        
                        "referencia":"00098_1",
                        "cantidad":"96",
                        "cantidad_proveedor":null,
                        "delivery_time":"delivery time 4 days"
                        
                    ]
                
            

我需要导出到 csv

"referencia":"00000",
"cantidad":"24",
"cantidad_proveedor":null,
"delivery_time":"delivery time 2 days"

采用这种格式:

"00000","24",null,"delivery time 2 days"
"00001","24","48",""
"00098_1","96",null,"delivery time 4 days"
......

我试着按照我正在学习的方式去做

$decoded = json_decode($json_file2);
$comments = $decoded->data[0]->results->resultado;
$fp = fopen('stock2.csv', 'w');
foreach($comments as $comment)
   fputcsv($fp,$comment);

但它总是给我错误foreach: 警告:为 foreach() 提供的参数无效

我哪里做错了? 坦克

【问题讨论】:

【参考方案1】:

您必须将一个数组传递给 fputcsv。使用此代码:

fputcsv($fp,(array)$comment);

【讨论】:

警告:为 foreach() 提供的参数无效【参考方案2】:

$json_file2 中没有数据数组字段。 您必须改用 $decoded->results->resultado。并将 $comment 转换为 Brian 所说的 array

最终代码如下所示:

$decoded = json_decode($json_file2);
$comments = $decoded->results->resultado;
$fp = fopen('stock2.csv', 'w');
foreach($comments as $comment) 
    fputcsv($fp, (array)$comment);

通过该更改,您将获得类似的结果:

00000,24,,"delivery time 2 days"
00001,24,48,
00098_1,96,,"delivery time 4 days"

也许你应该编写你自己的 fputcsv 函数来获得你想要的结果,用 null 和带引号的数字。

【讨论】:

完美的宇进!谢谢!我不能给你一个积极的,没有足够的声誉:( @Juanjo 您可以通过单击该项目左侧的复选标记来接受答案。这会给用户 +15 声望,我相信会给你 +2。

以上是关于在 PHP 中 JSON 数组导出为 CSV的主要内容,如果未能解决你的问题,请参考以下文章

通过 PHP 导出为 CSV

将php数组数据导出为CSV或Excel

使用 PHP/PDO 将大型 MySQL 表导出为 CSV

SQL、PHP 导出为 CSV

如何将 Firebase 实时数据库导出为 CSV?

有没有办法将领域数据库导出为 CSV/JSON?