Python读写json文件

本文介绍了如何使用Python读写JSON文件的方法,包括处理不同编码格式的文件及如何使用json模块的dump函数设置输出格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天做数据处理的时候需要将csv文件转为json文件,于是了解了一下如何用python读写json文件,这里简要记录一下方法和需要注意的地方(不定期更新)。

什么是json

JSON是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。[维基百科-JSON]
JSON用于描述数据结构,有以下形式存在。
- 对象(object):一个对象以“{”开始,并以“}”结束。一个对象包含一系列非排序的名称/值对,每个名称/值对之间使用“,”分区。
- 名称/值(collection):名称和值之间使用“:”隔开,一般的形式是:

{name:value}

例如:

{“firstName”:”Brett”}

在python中若要进行json文件的读写,需要添加json模块

python读取json文件

python读取json文件的代码非常简单,通过调用json.load()函数就行了。如下:

import json
infile = open('my.json','r')
data = json.load(infile)

infile.close()

但是一开始我用python读取json文件的时候,一直出现“No JSON object could be decoded”的错误。在网上各种查阅之后,发现python在读取JSON文件时需要自己指定编码方式。python 2.7的手册中这么写道:

If the contents of fp are encoded with an ASCII based encoding other than UTF-8 (e.g. latin-1), then an appropriate encoding name must be specified. Encodings that are not ASCII based (such as UCS-2) are not allowed, and should be wrapped with codecs.getreader(encoding)(fp), or simply decoded to a unicode object and passed to loads().

意思是,如果json文件不是以ASCII为基础的UTF-8,那么需要手动指定encoding格式。经测试,如果json文件编码格式为ANSI,可以成功解码。如果是UTF-8格式,需要按下面的代码一样指定encoding。

import json
infile = open('my.json','r')
data = json.load(infile, encoding='UTF-8')

infile.close()

不过,诡异的是,即使是UTF-8编码,也一定要是“无BOM的UTF-8格式”,否则还是不能解码成功。

参考资料:
http://www.crifan.com/fixed_problem_for_python_valueerror_no_json_object_could_be_decoded/

python存储json文件

存储json文件的时候需要用到json.dump()函数。使用的时候可以指定一些参数来设置写入的格式。比如sort_keys指定key的排序方式(python的字典是无序的),indent指定每个变量的缩进量,separators可以消除多余的空格(这样可以大大减小文件大小)。

outfile = open('out.json','w')
outfile.write(json.dumps(data, sort_keys=False, indent=2, separators=(',', ': '), encoding="utf-8", ensure_ascii=False))

outfile.close()

目前python对json文件的读写就总结到这里,有新内容再来更新吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值