在python中支持json合适的数据是经过json模块实现的。html
在序列化json数据的时候遇到两个形状很像的函数,dump()和dumps()。主要说说他们的区别python
先看看官方文档的说明:https://docs.python.org/3.6/library/json.html#json.dump, 咱们摘出两段来看看json
json.
dump
(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
Serialize obj as a JSON formatted stream to fp (a .write()
-supporting file-like object) using this conversion table.函数
If skipkeys is true (default: False
), then dict keys that are not of a basic type (str
, int
, float
, bool
, None
) will be skipped instead of raising a TypeError
.ui
The json
module always produces str
objects, not bytes
objects. Therefore, fp.write()
must support str
input.this
.spa
.code
后面就不用看了,咱们从这能看出来,dump()是把一个对象序列化为一个json格式的流,并把这个流给到了fp,fp也是有要求的:一个file_like对象,而且支持write()方法。orm
经过这个解释咱们大概能想明白,无非是一个文件或者IO流对象 如 BytesIo 或 StringIo对象,咱们用三种对象都来试一下:htm
1 json.dump({'name':'fanyuchen'}, fp=open('C:\\Users\\fyc\\Desktop\\json1.txt', 'w')) 2 with open('C:\\Users\\fyc\\Desktop\\json1.txt', 'r') as f: 3 print(f.read()) 4 5 strIo = StringIO() 6 json.dump({'name':'fanyuchen'}, strIo) 7 print(strIo.getvalue()) 8 9 bytIo = BytesIO() 10 json.dump({'name':'fanyuchen'}, bytIo) 11 print(bytIo.read())
运行结果:文件和StringIo对象均可以,可是ByteIo对象报错,缘由也是明显的,既然要用到参数bytIo的write()方法,就要按照人家的路子来,然而BytesIo的write()方法须要接受一个 bytes_likes对象,json显然不像 bytes_likes
Traceback (most recent call last):
File "C:/Users/fyc/liaoxuefeng/base.py", line 520, in <module>
json.dump({'name':'fanyuchen'}, bytIo)
File "C:\Python36\lib\json\__init__.py", line 180, in dump
fp.write(chunk)
TypeError: a bytes-like object is required, not 'str'
因此总结一下:dump()把一个对象按json格式序列化,能够写入文件,也能够写入StringIo类型
再来看json.dumps()的用法,依然是先看文档
json.
dumps
(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
Serialize obj to a JSON formatted str
using this conversion table. The arguments have the same meaning as in dump()
.
dumps()比较简单,说的很明确, 把一个对象按照json格式序列化为一个字符串。因此用起来也简单:
1 d = dict({'name':'fanyuchen'}) 2 print(json.dumps(d))