使用php将json api结果以换行符分隔格式保存到json文件

Posted

技术标签:

【中文标题】使用php将json api结果以换行符分隔格式保存到json文件【英文标题】:Save json api results to json file in newline delimited format using php 【发布时间】:2019-09-13 19:32:36 【问题描述】:

我从一个 api 调用中获取了一个嵌套的 json 对象,我正在尝试将它保存到一个以换行符分隔的 json 文件中,以便可以将其导入到 Google Big Query 中。

这是我所拥有的,它会将其保存到我的文件中,但仍然没有正确格式化以便 Big Query 导入它。

    $response = $this->client->post($url);

    $results = json_decode($response->getBody()->getContents());
    $date = Carbon::now()->toDateString();

    $filename = 'resources/results-' . $date . '.ndjson';

    foreach ($results as $result) 
        $newline = json_encode($result) . "\n";
        file_put_contents(base_path($filename), $newline, FILE_APPEND);
    

我也刚刚尝试将 json 保存到文件中,但在尝试导入大查询时遇到同样的错误。

【问题讨论】:

你遇到什么错误? 读取数据时出错,错误信息:无法解析JSON:启动新数组时未找到对象。;开始数组返回假;解析器在字符串结束之前终止 尝试调试响应,好像json返回fom API不正确。 $body = json_decode($response->getBody(), true); dd($body); 将第三个参数作为 true 传递将使 array 不是对象。 我得到了一个 4 层深的嵌套数组。 【参考方案1】:

将 true 值传递给 json_decode() 方法的第二个参数以返回关联数组,如下所示:

  $results = json_decode($response->getBody()->getContents(),true);

【讨论】:

以上是关于使用php将json api结果以换行符分隔格式保存到json文件的主要内容,如果未能解决你的问题,请参考以下文章

以 XML/JSON 格式返回 Google Analytics Reporting API 结果

将文件中以换行符分隔的 JSON 上传到 BigQuery

带有 Google PHP SDK 的 YouTube API - 以 JSON 格式响应

在 Python 中将 JSON 转换为换行符分隔的 JSON

将参数发布到 Rest API

将文件读入以逗号和换行符分隔的向量