【问题标题】:Multiple JSON API Pages into single CSV file多个 JSON API 页面到单个 CSV 文件中
【发布时间】:2018-06-09 18:00:28
【问题描述】:

试图将返回 JSON 的 API 的多个页面放入一个 CSV 文件中。目前,将循环的最大页面数量设置为 120 就足够了。

这是第一个没有任何循环的请求,它创建了一个工作 CSV 文件 (output.txt)。

<?php

$pageNo = "1";      

$jsonString = file_get_contents("http://api.domain.com/apikey/? 
name1=value1&name2=value2&pageNo=$pageNo");
$jsonDecoded = json_decode($jsonString, true);
$csvHeader=array();
$csvData=array();
$csvFileName = 'output.txt';
$fp = fopen($csvFileName, 'w');
$counter=0;
foreach($jsonDecoded["result"]["items"] as $key => $value)
{
jsontocsv($value);
if($counter==0)
{
    fputcsv($fp, $csvHeader, ';');
    $counter++;
}
fputcsv($fp, $csvData, ';');
$csvData=array();
}
fclose($fp);

function jsontocsv($data)
{
global $csvData,$csvHeader;
foreach($data as $key => $value)
{
    if(!is_array($value))
    {
        $csvData[]=$value;
        $csvHeader[]=$key;
    }
    else 
    {
        jsontocsv($value);
    }
}
}

?>

我猜这应该在一个 while 循环中,最后有 ++$pageNo 之类的东西,更新值。但是,所有先前的尝试都导致文件每次都被覆盖,并且只有最后一页被写入文件。每次循环时如何向 CSV 添加内容?不过,理想情况下,每次整个脚本运行时(每天一次),整个 CSV 文件都将替换为更新后的值。

谢谢

【问题讨论】:

    标签: php json api csv


    【解决方案1】:

    您正在以写入模式打开文件,这会将指针指向文件的开头 (fopen($csvFileName, 'w')),这就是它被覆盖的原因。尝试使用附加模式,它应该将指针指向末尾。 . 另外,如果您想在文件不存在的情况下创建该文件,请使用加号,如下所示:fopen($csvFileName, 'a+')

    【讨论】:

    • 您好,感谢您的回复,有道理!你认为有可能将两者结合起来,所以一切都以写模式包装,但每个循环都是附加的?
    • 是的,a+ 应该这样做。如果文件不存在,它会创建文件,并在每次迭代中附加内容。尝试用$fp = fopen($csvFileName, 'a+');替换行$fp = fopen($csvFileName, 'w');
    • 配合 a+ 工作正常!只需将它放在一个while循环中,while($pageNo
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2016-12-29
    • 2023-03-17
    • 2020-08-22
    • 2022-10-24
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多