如何将存储在字典数据中的JSON数据写入文件?
f = open('data.json', 'wb')
f.write(data)
这会导致错误:
TypeError:必须是字符串或缓冲区,而不是dict
如何将存储在字典数据中的JSON数据写入文件?
f = open('data.json', 'wb')
f.write(data)
这会导致错误:
TypeError:必须是字符串或缓冲区,而不是dict
当前回答
在将字典作为json写入文件之前,必须使用json库将该字典转换为json字符串。
import json
data = {
"field1":{
"a": 10,
"b": 20,
},
"field2":{
"c": 30,
"d": 40,
},
}
json_data = json.dumps(json_data)
此外,您还可以向json数据添加缩进以使其看起来更漂亮。
json_data = json.dumps(json_data, indent=4)
如果要在转换为json之前对密钥进行排序,
json_data = json.dumps(json_data, sort_keys=True)
您也可以使用这两者的组合。
有关更多功能,请参阅此处的json文档
最后,您可以写入一个json文件
f = open('data.json', 'wb')
f.write(json_data)
其他回答
要使用缩进编写JSON,请使用“漂亮的打印”:
import json
outfile = open('data.json')
json.dump(data, outfile, indent=4)
此外,如果您需要调试格式不正确的JSON,并希望得到有用的错误消息,请使用importsimplejson库,而不是importjson(函数应该相同)
我没有足够的声誉来添加评论,所以我只在这里写下我对这个烦人的TypeError的一些发现:
基本上,我认为这只是Python 2中json.dump()函数中的一个bug——它无法转储包含非ASCII字符的Python(字典/列表)数据,即使您使用encoding='utf-8'参数打开文件。(即无论你做什么)。但是,json.dumps()在Python 2和3上都有效。
为了说明这一点,接下来是phihag的回答:如果数据包含非ASCII字符,他的回答中的代码在Python 2中中断,出现异常TypeError:必须是unicode,而不是str。(Python 2.7.6,Debian):
import json
data = {u'\u0430\u0431\u0432\u0433\u0434': 1} #{u'абвгд': 1}
with open('data.txt', 'w') as outfile:
json.dump(data, outfile)
然而,它在Python 3中运行良好。
json.dump(data, open('data.txt', 'wb'))
公认的答案是好的。然而,我使用它时遇到了“is not json serializable”错误。
这是我修复它的方法以open(“filename.json”,'w')作为输出:
output.write(str(响应))
虽然这不是一个很好的修复方法,因为它创建的json文件不会有双引号,但是如果您希望快速而肮脏,这是很好的。
对于那些试图转储希腊语或其他“外来”语言(如我),但同时也遇到诸如和平符号(\u262E)等奇怪字符或其他通常包含在json格式数据(如Twitter)中的字符的问题(unicode错误)的人,解决方案可能如下(sort_keys显然是可选的):
import codecs, json
with codecs.open('data.json', 'w', 'utf8') as f:
f.write(json.dumps(data, sort_keys = True, ensure_ascii=False))