【问题标题】:Incrementally Append to JSON File in a For Loop在 For 循环中增量追加到 JSON 文件
【发布时间】:2017-06-18 15:52:27
【问题描述】:

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

【问题讨论】:

  • 你有没有尝试过?如果您能向我们展示您遇到的问题,或者您想要完成的工作的伪代码,将会更有帮助。
  • 当然。这是一个非常简单的任务——这就是为什么我没有包含任何代码。

标签: python json api for-loop


【解决方案1】:

更新

好吧,由于我无法访问您的 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:

【讨论】:

  • 谢谢——可能没有说清楚,但我希望它会附加到 json 文件中。只是将 json 对象附加到一个文件中(而不是一个大的 json 对象)。当我尝试重新加载文件时,我收到一个错误,因为它不是 json 对象。我将编辑问题以使其更清楚。
  • 好吧,我需要看看 JSON 的基本结构才能给你一个准确的解决方案
  • 这不是一个有效的 JSON.. 你的意思是它们可能在一个数组中?像这样:[ {'attribute1':1}, {'attribute2':10} ] 或者每次调用,都会像这样返回一个:{'attribute2':10}
  • 对不起,我很笨。进行编辑以显示它的实际外观。感谢您的耐心等待。
  • 谢谢。我想我也想做的是不将 json 对象存储在内存中。如果我执行此操作甚至 100K 次(并且我有 1.5m json 来拉对象),我的计算机将开始从它的耳朵冒烟。似乎没有办法轻松地做到这一点。感谢您与我一起解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 2013-09-22
  • 2016-09-13
  • 1970-01-01
  • 2013-11-25
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多