如何将 JSON 数据写入文件?

新手上路,请多包涵

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

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

这给出了错误:

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

原文由 user1530318 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 367
2 个回答

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

原文由 phihag 发布,翻译遵循 CC BY-SA 4.0 许可协议

要在 Python 2 的接受答案中获取 utf8 编码文件而不是 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 仍然是必需的。

为了避免在内存中存储数据的编码副本( dumps 的结果)并在 Python 2 和 3 中输出 utf8 编码的 字节串,请使用:

 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

通过向 dumpdumps 的参数添加标志 indent=4, sort_keys=True (如 dinos66 建议的那样)进一步提高可读性。这样,您将在 json 文件中获得一个很好的缩进排序结构,但代价是文件大小稍大。

原文由 Antony Hatchkins 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏