从多个字典中编写一个JSON

时间:2019-12-25 07:10:23

标签: python json

我试图通过将一个字典一个接一个地追加/转储到一个json文件中,将20多个字典写入一个json文件中,到目前为止,我已经完成了以下代码来完成,但我做不到。如果有人知道更好的方法会有所帮助

run1 = client.send_get('get_tests/11023')
run2 = client.send_get('get_tests/11038')

with open('result.json', 'w') as fp:
    json.dump(run1, fp)

2 个答案:

答案 0 :(得分:4)

尝试一下:

run1 = client.send_get('get_tests/11023')
run2 = client.send_get('get_tests/11038')

with open('result.json', 'w') as fp:
    json.dumps({'run1': run1, 'run2': run2}, fp)

如果只想将单个字典推送到文件中,则必须合并run1和run2:

run1.update(run2)

然后尝试:

with open('result.json', 'w') as fp:
    json.dumps(run1, fp)

您也可以尝试以下方法:

with open('result.json', 'w') as fp:
    json.dumps({**run1, **run2}, fp)

答案 1 :(得分:3)

我不确定是否可以。当您读回文件的内容时,您期望什么?

当您从文件中读取内容时,它应该是有效的json才能加载。一种选择是像这样创建字典

d = dict(run1 = run1, run2 = run2, ... )

,然后将json.dump d本身放入文件中。

更新: 这是一个例子。它使用列表而不是字典(基于您的评论),但是想法是相同的。

run1 = dict(status = "ok", message = "All good")
run2 = dict(status = "error", message = "Couldn't connect")

def save_data(*runs):
   with open("foo.json", "w") as f:
      json.dump(list(runs), f)

def load_data(fname):
   with open(fname) as f:
      return json.load(f)


save_data(run1, run2)
outputs = load_data("foo.json")
print (outputs)

[{'status': 'ok', 'message': 'All good'}, {'status': 'error', 'message': "Couldn't connect"}]