在For循环中递增附加到JSON文件

时间:2017-02-01 19:02:42

标签: python json api for-loop

有没有办法在python中的for循环中将单个JSON对象附加到json文件。我不希望将我的所有数据存储在一个巨大的json对象中并立即将其全部转储,因为我计划执行数百万个API请求。我想发出一个API请求,将结果转储到JSON文件中,然后转到下一个API请求并将其转储到相同的 JSON文件中。

下面的代码会覆盖JSON文件,我正在寻找附加内容。

for url in urls:
    r = sesh.get(url)
    data = r.json()

    with open('data.json', 'w') as outfile:
        json.dump(data, outfile)

这样:

with open('data.json') as outfile:
    data = json.load(data, outfile)

type(data)
>> dict

r.json看起来像这样:

{'attribute1':1, 'attribute2':10}

1 个答案:

答案 0 :(得分:3)

<强>更新

因为我无法访问您的API,所以我只是以您提供的格式在数组中放置了一些示例响应。

import json

urls = ['{"attribute1":1, "attribute2":10}', '{"attribute1":67, "attribute2":32}', '{"attribute1":37, "attribute2":12}'];
json_arr = []

for url in urls:
    data = json.loads(url)
    json_arr.append(data)
    with open('data.json', 'w') as outfile:
        json.dump(json_arr, outfile)

基本上我们保留一个数组并将每个API响应附加到该数组。然后,我们可以将累积的JSON写入文件。另外,如果你想在不同的代码执行中更新相同的JSON文件,你可以在代码的开头将现有的输出文件读入一个数组,然后继续我的例子。

<小时/> 更改写入模式以附加

尝试更改此内容:

with open('data.json', 'w') as outfile:

对此:

with open('data.json', 'a') as outfile: