#! /usr/bin/env python
import json
def write_json():
# create a dictionary
student_data = {"students":[]}
#create a list
data_holder = student_data["students"]
# just a counter
counter = 0
#loop through if you have multiple items..
while counter < 3:
data_holder.append({'id':counter})
data_holder.append({'room':counter})
counter += 1
#write the file
file_path='/tmp/student_data.json'
with open(file_path, 'w') as outfile:
print("writing file to: ",file_path)
# HERE IS WHERE THE MAGIC HAPPENS
json.dump(student_data, outfile)
outfile.close()
print("done")
write_json()
19
你忘了实际的JSON部分 - data 是一个字典,还没有JSON编码 . 写这样:
import json
with open('data.json', 'w') as outfile:
json.dump(data, outfile)
12 回答
可以按如下方式将JSON数据写入文件
写入文件:
使用Python 2 3读写JSON文件;适用于unicode
json.dump的参数说明:
indent
:使用4个空格缩进每个条目,例如当一个新的dict启动时(否则所有都将在一行),sort_keys
:对词典的键进行排序 . 如果要将json文件与diff工具进行比较/将它们置于版本控制之下,这非常有用 .separators
:防止Python添加尾随空格带包
看看我的实用程序包mpu,看一个超级简单易记的实用程序:
创建了JSON文件
公共文件结尾
.json
替代品
CSV:超简单格式(read & write)
JSON:很适合编写人类可读的数据;非常常用(read & write)
YAML:YAML是JSON的超集,但更容易阅读(read & write,comparison of JSON and YAML)
pickle:Python序列化格式(read & write)
MessagePack(Python package):更紧凑的表示(read & write)
HDF5(Python package):对于矩阵很好(read & write)
XML:也存在叹气(read&write)
对于您的应用程序,以下可能很重要:
其他编程语言的支持
读/写性能
紧凑度(文件大小)
另见:Comparison of data serialization formats
如果你正在寻找一种制作配置文件的方法,你可能想阅读我的短文Configuration files in Python
要获得 utf8 -encoded文件,而不是在接受的Python 2答案中使用 ascii 编码:
Python 3中的代码更简单:
在Windows上,
open
的encoding='utf-8'
参数仍然是必需的 .为了避免在内存中存储数据的编码副本(
dumps
的结果)并在Python 2和3中输出utf8编码的字节串,请使用:codecs.getwriter
调用在Python 3中是多余的,但Python 2需要Readability and size:
ensure_ascii=False
的使用提供了更好的可读性和更小的尺寸:通过将
indent=4, sort_keys=True
(由dinos66建议)添加到dump
或dumps
的参数,进一步提高可读性 . 这样你就可以在json文件中获得一个很好的缩进排序结构,代价是文件大小稍大 .以前的所有答案都是正确的,这是一个非常简单的例子
你忘了实际的JSON部分 -
data
是一个字典,还没有JSON编码 . 写这样:注意:适用于3.x和2.x.
我会用前面提到的答案稍作修改来回答,那就是编写一个美化的JSON文件,人眼可以更好地阅读 . 为此,将
sort_keys
作为True
和indent
传递4个空格字符,你就可以了 . 还要注意确保不会在您的JSON文件中写入ascii代码:如果您尝试使用json格式将pandas数据帧写入文件,我建议这样做
我没有足够的声誉来添加评论,所以我只是在这里写下我讨厌的TypeError的一些发现:
基本上,我认为这只是Python 2 中的
json.dump()
函数中的一个错误 - 它无法转储包含非ASCII字符的Python(字典/列表)数据,即使您使用encoding = 'utf-8'
参数打开该文件也是如此 . (即无论你做什么) . 但是,json.dumps()
适用于Python 2和3 .为了说明这一点,请跟进phihag的答案:如果
data
包含非ASCII字符,则他的答案中的代码会在Python 2中出现异常TypeError: must be unicode, not str
. (Python 2.7.6,Debian):然而,它在Python 3中运行良好 .
对于那些试图抛弃希腊语或其他“异国情调”语言的人,例如我,但也有问题(unicode错误)与奇怪的字符,如和平符号(\ u262E)或其他通常包含在json格式数据中比如Twitter,解决方案可能如下(sort_keys显然是可选的):
接受的答案很好 . 但是,我使用它遇到了“不是json serializable”错误 .
这里's how I fixed it with open( 202896 , ' w')作为输出:
output.write(STR(响应))
虽然它不是一个好的修复,因为它创建的json文件不会有双引号,但是如果你正在寻找快速和脏的话,这是很好的 .
使用JSON使用 json.dump() 或 json.dumps() 在文件中写入数据 . 这样写就是将数据存储在文件中 .
列表中的此示例存储到文件中 .