如何将 JSON 数据写入文件?

2022-09-05 00:53:27

如何将存储在字典中的 JSON 数据写入文件?data

f = open('data.json', 'wb')
f.write(data)

这给出了错误:

类型错误:必须是字符串或缓冲区,而不是 dict


答案 1

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 文档。


答案 2

要获取 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=Truedumpdumps