Python常用模块之json模块
- 常用模块:
一个Python文件就是一个模块
import xxx
1. 标准模块,Python自带的,如time/random
2. 第三方模块,如连接mysql,需要安装
3. 自己写的Python文件
- 校验json格式是否正确:www.bejson.com
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,其最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。json类似于xml,但比 XML 更小、更快,更易解析。
一、json字符串转为字典
json.load / json.loads
两个方法功能类似,可选参数也相同,最大的区别在于,json.load方法接受的输入,即第一个参数,是包含json数据的文件对象,如open方法的返回对象,
json.loads接受的输入是json字符串,而非文件对象。从输入类型的区别也可以看出两者的使用场合。
- def 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``.
- # 序列号 “obj” 数据类型 转换为 JSON格式的字符串
- def 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).
- 我理解为两个动作,一个动作是将”obj“转换为JSON格式的字符串,还有一个动作是将字符串写入到文件中,也就是说文件描述符fp是必须要的参数 """
1. json.loads : 将json编码的字符串转换为python的数据结构
- import json
json_str = '''- {"name":"xiaohei","age":18,"sex":"男","age":18}
- '''
- res = json.loads(json_str) #把字符串(json串)转成字典
- print(res)
- print(type(json_str))
- print(type(res))
- #以上输出如下:
- # {'name': 'xiaohei', 'age': 18, 'sex': '男'}
- # <class 'str'>
- # <class 'dict'>
2. json.load : 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构,load可以自己读文件
- import json
- with open('text.json','r',encoding='utf-8') as fr:
- aa = json.loads(fr.read())
- fr.seek(0)
- bb = json.load(fr)# json.load(fr)和json.loads(fr.read()) 返回结果一样,load可以自己去读文件
- print(aa)
- print(bb)
- #输出
- # {'name': '小黑', 'age': 18, 'sex': '男'}
- # {'name': '小黑', 'age': 18, 'sex': '男'}
二、字典转换为json
json.dump / json.dumps
对应于load和loads,dump的第一个参数是对象字典,第二个参数是文件对象,可以直接将转换后的json数据写入文件,dumps的第一个参数是对象字典,其余都是可选参数。dump和dumps的可选参数相同,这些参数都相当实用,现将用到的参数记录如下:
ensure_ascii 默认为True,保证转换后的json字符串中全部是ascii字符,非ascii字符都会被转义。如果数据中存在中文或其他非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常。
indent 缩进,默认为None,没有缩进,设置为正整数时,输出的格式将按照indent指定的半角空格数缩进,相当实用。
separators 设置分隔符,默认的分隔符是(',', ': '),如果需要自定义json中的分隔符,例如调整冒号前后的空格数,可以按照(item_separator, key_separator)的形式设置。
sort_keys 默认为False,设为True时,输出结果将按照字典中的key排序。
查看源码:
- def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
- """Deserialize ``s`` (a ``str`` instance containing a JSON document) to a Python object.
- 将包含str类型的JSON文档反序列化为一个python对象"""
- def load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
- """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document) to a Python object.
- 将一个包含JSON格式数据的可读文件饭序列化为一个python对象"""
1. json.dumps: 将数据通过特殊的形式转换为所有程序语言都认识的字符串
- import json
- dic = {
- "xiaohei":{
- "age":18,
- "password":12345,
- "sex":"男",
- "addr":"北京"
- },
- "马春波":{
- "age":18,
- "password":12345,
- "sex":"男",
- "addr":"北京"
- },
- "王东泽":{
- "age":18,
- "password":12345,
- "sex":"男",
- "addr":"北京"
- },
- }
- res = json.dumps(dic,ensure_ascii=False,indent=4)#把字典变成字符串
- print(res)
- f = open('user.json','w',encoding='utf-8')
- f.write(res) #写入文件
- #输出:
- {
- "xiaohei": {
- "age": 18,
- "password": 12345,
- "sex": "男",
- "addr": "北京"
- },
- "马春波": {
- "age": 18,
- "password": 12345,
- "sex": "男",
- "addr": "北京"
- },
- "王东泽": {
- "age": 18,
- "password": 12345,
- "sex": "男",
- "addr": "北京"
- }
- }
2. json.dump:将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
- import json
- dic = {
- "xiaohei":{
- "age":18,
- "password":12345,
- "sex":"男",
- "addr":"北京"
- },
- "小白":{
- "age":18,
- "password":12345,
- "sex":"男",
- "addr":"北京"
- },
- "小王":{
- "age":18,
- "password":12345,
- "sex":"男",
- "addr":"北京"
- },
- }
- fw = open('newuser.json','w',encoding='utf-8')#打开一个新的文件
- aa = json.dump(dic,fw,indent=4,ensure_ascii=False)#将字典写到该文件中
- print(aa)
三、 总结
1. json序列化方法:
dumps:无文件操作 dump:序列化+写入文件
2. json反序列化方法:
loads:无文件操作 load: 读文件+反序列化
3.
python 原始类型向 json 类型的转化对照表:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
4. json 类型转换到 python 的类型对照表:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
Python常用模块之json模块的更多相关文章
- Python常用内置模块之xml模块
xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...
- Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块
一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...
- Python 入门之 内置模块 -- 序列化模块(json模块、pickle模块)
Python 入门之 内置模块 -- 序列化模块(json模块.pickle模块) 1.序列化 Python中这种序列化模块有三种: json模块 : 不同语言都遵循的一种数据转化格式,即不同 ...
- os模块、sys模块、json模块、pickle模块、logging模块
目录 os模块 sys模块 json模块 pickle模块 logging模块 os模块 功能:与操作系统交互,可以操作文件 一.对文件操作 判断是否为文件 os.path.isfile(r'路径') ...
- os模块,sys模块,json模块,subprocess模块
os模块 一·什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同 的平台进行相应的操作,在python编程时,经常和文件.目录打交道 ...
- Python 3 中的json模块使用
1. 概述 JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了JSON数据的处理功能. Python中一种非常常 ...
- Python序列化-pickle和json模块
Python的“file-like object“就是一种鸭子类型.对真正的文件对象,它有一个read()方法,返回其内容.但是,许多对象,只要有read()方法,都被视为“file-like obj ...
- Python 自学基础(四)——time模块,random模块,sys模块,os模块,loggin模块,json模块,hashlib模块,configparser模块,pickle模块,正则
时间模块 import time print(time.time()) # 当前时间戳 # time.sleep(1) # 时间延迟1秒 print(time.clock()) # CPU执行时间 p ...
- Python学习笔记:json模块和pickle模块(数据序列化)
Python中的json模块和pickle都是用于数据的序列化和反序列化,它们提供的方法也是一样的:dumps,dump,loads,load dumps(obj):将对象序列化为str. dump( ...
随机推荐
- anaconda的安装教程和使用方法
一.anaconda安装方法: 1.下载: anaconda官方下载地址:https://www.anaconda.com/download/ 2.安装: 可以自己指定路劲,也可以选择默认安装,最后记 ...
- Spring MVC 架构的java web工程如何添加登录过滤器
发布到外网的web工程必须添加登录过滤器来阻挡一些非法的请求,即只有登录的用户才能对web工程进行请求,否则无论请求什么资源都需要调整到登录页面进行登录操作.这时就需要用到过滤器,其实非常简单,只需要 ...
- 2018 ACM 网络选拔赛 青岛赛区
一些题目的代码被网站吞了…… Problem B. Red Black Tree http://acm.zju.edu.cn/onlinejudge/searchProblem.do?contestI ...
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块算法)
传送门 题意: 中文题意,不再赘述. 题解: 下午在补分块算法的相关知识,看到某大神博客推荐的这道题目,就试着做了做: TLE了一下午可还行: 我的思路: 将这 n 个点分成 sqrt(n) 块: i ...
- 在Linux中复制文件夹下的全部文件到另外文件夹
https://jingyan.baidu.com/article/656db918f83c0de380249c5a.html 在Linux系统中复制或拷贝文件我们可以用cp或者copy命令,但要对一 ...
- 拆分字符串法 获取url的GET参数
function serilizeURL(url){ var rs=url.split("?")[1]; var arr=rs.split("&"); ...
- css3: 基本知识记录
1.transition过渡: 元素从一种样式到另一种样式添加效果: div { transition: width 2s, height 2s, transform 2s; -moz-transit ...
- 流明(lux)和坎德拉;
流明是光照度: 坎德拉是光强: 流明是光通量的单位, cd是光强单位 光强是单位立体角的光通量: 照度是单位面积的光通量: 尼特是亮度单位 1尼特 = 1CD/m^2: 1 lx = 1 流明每 ...
- 【openssl】利用openssl完成X509证书和PFX证书之间的互转
利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址—— https://www.openssl.org/source/ OpenSSL ...
- NGUI-实例化问题
大家好,我是蜀云泉,我的博客存在的不足之处,希望大家包涵. 我在研究NGUI的时候发现一个问题.在NGUI下实例化物体,其坐标总是位于原点,也就是UIRoot的(0,0,0)处,困惑了好几天我才发现N ...