常用模块:
一个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

最新文章

  1. jQuery获取输入框并设置焦点
  2. Apache Shiro系列二,概述 —— 基本概念
  3. mvc模型验证
  4. unix的策略与机制
  5. hdu 4607 Park Visit(树上最长链)
  6. 获取Ip 的地域等信息接口-实例
  7. poj2954
  8. Ecstore后台中显示页面display,page,singlepage方法的区别?
  9. 吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
  10. hdu4753
  11. saiku中过滤窗口优化及隐藏异常报错
  12. Android开发之简单的电子相册实现
  13. A - 小Y上学记——修学分
  14. 新CCIE笔记之'口口相传'路由协议
  15. 硬盘安装Kali
  16. 如何升级centos到最新版本
  17. Java基础_0310:引用传递
  18. yum源更换为本地光盘
  19. 51nod 1132 覆盖数字的数量 V2
  20. Android中常见的对话框

热门文章

  1. 洛谷P3338 力
  2. 洛谷P3703 树点涂色
  3. A1106. Lowest Price in Supply Chain
  4. C++11并发——多线程条件变量std::condition_variable(四)
  5. Fiddler 只取所需
  6. IE jQuery ajax 请求缓存问题
  7. 在gitlab新建空项目,将本地的git仓库的内容上传
  8. Code review应该怎么做
  9. mysql如何从全备文件中恢复单个库或者单个表
  10. Java基础方法整理