我试图通过将一个字典一个接一个地追加/转储到一个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)
答案 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"}]