在使用python执行期间多次将请求的响应写入json文件

Posted

技术标签:

【中文标题】在使用python执行期间多次将请求的响应写入json文件【英文标题】:Write response of a request into json file several times during execution with python 【发布时间】:2021-10-19 04:16:21 【问题描述】:

我有一个应用程序向 API 发出 GET 请求,以每隔给定的秒数获取数据。我想要做的是将收到的每个响应写入单个(理想情况下为 json)文件以处理该数据,以便我可以将 json POST 请求发送到不同的 API。我有以下函数,当被调度程序调用时,它只写第一个响应,而不是一个。如何实现将所有响应写入单个文件以供以后使用的方法。

def send_request():
    url = "API URL"

    try:
        # sending get request and saving the response as response object
        r = requests.get(url = url)

    except (requests.Timeout, requests.ConnectionError, requests.HTTPError) as err:
        print("Error while trying to GET data")
        print(err)

    print(r.content)

    data = json.loads(r.content)

    #Json file writer
    with open('data.json', 'w') as outfile:
        json.dump(data, outfile,indent=4, sort_keys=True)
        outfile.flush()

调度器看起来像这样:

from apscheduler.schedulers.blocking import BlockingScheduler as scheduler

if __name__ == '__main__':
    sched = scheduler()
    print(time.time())
    sched.add_job(send_request, 'interval', seconds=60)
    sched.start()

我知道这个调度器对于任务来说可能是多余的,但如果它不是导致问题的部分也没关系。

【问题讨论】:

【参考方案1】:

每次重写时,您似乎只看到文件中的最后一个响应。

你应该追加到你的文件而不是重写它:

#Json file writer
with open('data.json', 'a') as outfile:
    json.dump(data, outfile, indent=4, sort_keys=True)
    outfile.flush()

注意open('data.json', 'a') 中的a 参数,它代表“追加”

【讨论】:

以上是关于在使用python执行期间多次将请求的响应写入json文件的主要内容,如果未能解决你的问题,请参考以下文章

会话技术概述

处理 .JS 文件的简单请求时,Tomcat 响应挂起

多次响应实时数据获取

会话技术

会话技术基础学习

Node.js之HTTP请求与响应