如何将 JSON 数据写入文件?
如何将存储在字典中的 JSON 数据写入文件?data
f = open('data.json', 'wb')
f.write(data)
这给出了错误:
类型错误:必须是字符串或缓冲区,而不是 dict
如何将存储在字典中的 JSON 数据写入文件?data
f = open('data.json', 'wb')
f.write(data)
这给出了错误:
类型错误:必须是字符串或缓冲区,而不是 dict
data
是一个Python字典。在写入之前,需要将其编码为 JSON。
使用此选项可实现最大兼容性(Python 2 和 3):
import json
with open('data.json', 'w') as f:
json.dump(data, f)
在现代系统(即Python 3和UTF-8支持)上,您可以使用以下命令编写更好的文件:
import json
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
请参阅 json
文档。
要获取 utf8 编码的文件,而不是在 Python 2 的可接受答案中使用 ascii 编码的文件,请使用:
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
Python 3 中的代码更简单:
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
在Windows上,争论仍然是必要的。encoding='utf-8'
open
要避免将数据的编码副本存储在内存中(结果 ),并在 Python 2 和 3 中输出 utf8 编码的字节串,请使用:dumps
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
codecs.getwriter
调用在 Python 3 中是多余的,但在 Python 2 中是必需的
可读性和大小:
使用 可提供更好的可读性和更小的尺寸:ensure_ascii=False
>>> json.dumps({'price': '€10'})
'{"price": "\\u20ac10"}'
>>> json.dumps({'price': '€10'}, ensure_ascii=False)
'{"price": "€10"}'
>>> len(json.dumps({'абвгд': 1}))
37
>>> len(json.dumps({'абвгд': 1}, ensure_ascii=False).encode('utf8'))
17
通过在 的参数中添加标志(如 dinos66 所建议的)来进一步提高可读性。这样,您将在 json 文件中获得一个缩进良好的排序结构,但代价是文件大小略大。indent=4, sort_keys=True
dump
dumps