json.dump()和json.dmups()的区别
在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 aTypeError.The
jsonmodule always producesstrobjects, notbytesobjects. Therefore,fp.write()must supportstrinput..
.
后面就不用看了,我们从这能看出来,dump()是把一个对象序列化为一个json格式的流,并把这个流给到了fp,fp也是有要求的:一个file_like对象,并且支持write()方法。
通过这个解释我们大概能想明白,无非是一个文件或者IO流对象 如 BytesIo 或 StringIo对象,我们用三种对象都来试一下:
json.dump({'name':'fanyuchen'}, fp=open('C:\\Users\\fyc\\Desktop\\json1.txt', 'w'))
with open('C:\\Users\\fyc\\Desktop\\json1.txt', 'r') as f:
print(f.read()) strIo = StringIO()
json.dump({'name':'fanyuchen'}, strIo)
print(strIo.getvalue()) bytIo = BytesIO()
json.dump({'name':'fanyuchen'}, bytIo)
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
strusing this conversion table. The arguments have the same meaning as indump().dumps()比较简单,说的很明确, 把一个对象按照json格式序列化为一个字符串。所以用起来也简单:
d = dict({'name':'fanyuchen'})
print(json.dumps(d))
json.dump()和json.dmups()的区别的更多相关文章
- python中json.load()、json.loads()、json.dump()、json.dumps()的区别
json.load()从文件中读取json字符串 json.loads()将json字符串转换为字典类型 json.dumps()将python中的字典类型转换为字符串类型 json.dump()将j ...
- python中json.dump() 和 json.dumps() 有那些区别?
JSON字符串用json.dumps, json.loads JSON文件名用json.dump, json.load 以下内容摘自:<Python Cookbook> json 模块提供 ...
- Python中json.dump() 和 json.dumps()的区别
JSON字符串用json.dumps, json.loads JSON文件名用json.dump, json.load 以下内容摘自:<Python Cookbook> json 模块提供 ...
- json.dumps、json.dump、json.loads、json.load的区别
json 模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() 下面是如何将Python数据结构转换为json impor ...
- python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...
- 【Python基础】json.dumps()和json.loads()、json.dump()和json.load()的区分
json文件处理涉及的四个函数json.dumps()和json.loads().json.dump()和json.load()的区分 一.概念理解 1.json.dumps()和json.loads ...
- json模块:json.dumps()、json.loads()、json.dump()、json.load()
json.dumps().json.loads().json.dump().json.load() 4个方法的总结和使用: 注意:存在文件里面的东西,读出来都是字符串 import json 1.js ...
- python---json.dumps 与 json.loads /json.dump 和json.load区别
json.dumps 是将python的数据类型进行json的编码,生成json格式的数据,举例json_data = json.dumps(str) str为python的字符串类型数据,生成的j ...
- python中json.dump()与json.dumps()的区别
1.将python数据结构转换为json字符串(json.dumps()) >>> import json >>> data={'name':'pipi','age ...
随机推荐
- hdu1305Immediate Decodability(字典树)
这题看是否 这题能A是侥幸,解决的办法是先存一下输入的字符串,进行排序. Problem Description An encoding of a set of symbols is said to ...
- selenium webdriver窗口切换(下)
多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...
- char* a与char a[]的区别
char *a 与char a[] 的区别 char *a = "hello" 中的a是指向第一个字符‘a'的一个指针 char a[20] = "hello&quo ...
- 用liferay实现的增删改查例子-book管理系统
liferay 这个框架是一个开源的项目,大家可以修改源代码,来实现自己的需求.但是关于liferay的开发资料中文的很少关于liferay的基础知识,大家可以百度学习一下,再来看下边的例子 首先需要 ...
- EntityFramework包含作用
System.Data.Entity.Infrastructure.DbQuery的引用需要加入上面那个包
- tomcat 的最大连接数设置
前提说明为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器.达到保护自己的同时起到连接数负载均衡的作用. 动手去做一开始 ...
- Java: war包的作用及使用方法,如何解压后缀名为war的文件
1.什么是war文件? 如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,我们可以将Web应用程序打包成Web归档(WAR)文件.这个过程和把Jav ...
- linux常用命令:rpm 命令
rpm是一个功能十分强大的软件包管理系统. 1.命令格式: rpm [参数] [包名] 2.命令功能: 使得在Linux下安装.升级和删除软件包的工作变得容易,并且具有查询.验证软件包的功能.与图 ...
- 拉取远程仓库到本地错误The authenticity of host 'github.com (13.229.188.59)' can't be established.
1.个人在github上面创建了仓库,通过本地的git拉取远程仓库到本地报错信息如下: 这是因为Git使用SSH连接,而SSH第一次连接需要验证GitHub服务器的Key.确认GitHub的Key的指 ...
- css去掉a标签点击后的虚线框,outline,this.blur()
css去掉a标签点击后的虚线框,outline,this.blur() outline是css3的一个属性,用的很少.声明,这是个不能兼容的css属性,在ie6.ie7.遨游浏览器都不兼容. outl ...