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

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

这会导致错误:

TypeError:必须是字符串或缓冲区,而不是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文档。

其他回答

使用JSON将数据写入文件,使用JSON.dump()或JSON.dumps()。像这样写以将数据存储在文件中。

import json
data = [1,2,3,4,5]
with open('no.txt', 'w') as txtfile:
    json.dump(data, txtfile)

列表中的这个示例存储到文件中。

对于喜欢oneliner的人(因此,with语句不是一个选项),一个比留下悬空打开的文件描述符更干净的方法是使用pathlib中的write_text并执行以下操作:

pathlib.Path("data.txt").write_text(json.dumps(data))

在某些情况下,这在不允许语句的上下文中很有用,例如:

[pathlib.Path(f"data_{x}.json").write_text(json.dumps(x)) for x in [1, 2, 3]]

我并不是说它应该优先于使用(而且可能会慢一些),只是另一种选择。

json.dump(data, open('data.txt', 'wb'))

在将字典作为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)

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