您的位置:首页 > Web前端 > JavaScript

json.dump()和json.dmups()的区别

2020-01-15 08:48 78 查看

在python中支持json合适的数据是通过json模块实现的。

在序列化json数据的时候遇到两个形状很像的函数,dump()和dumps()。主要说说他们的区别

先看看官方文档的说明:https://docs.python.org/3.6/library/json.html#json.dump, 我们摘出两段来看看

19.2.1. Basic Usage

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
.

The 

json
 module always produces 
str
 objects, not 
bytes
 objects. Therefore, 
fp.write()
 must support 
str
 input.

.

.

后面就不用看了,我们从这能看出来,dump()是把一个对象序列化为一个json格式的流,并把这个流给到了fp,fp也是有要求的:一个file_like对象,并且支持write()方法。

通过这个解释我们大概能想明白,无非是一个文件或者IO流对象 如 BytesIo 或 StringIo对象,我们用三种对象都来试一下:

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))

 

 

转载于:https://www.cnblogs.com/fanyuchen/p/7234296.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
aijixun9021 发布了0 篇原创文章 · 获赞 0 · 访问量 1117 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: