活动地址:优快云21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
Python--json!
温馨提示:请学习时仔细观察各个实例的区别哦!
一、json基础概念及优势
1.json概念(引用菜鸟教程解释)
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
2.json功能优势
- 接口语言,经常用到。
- 轻量级文本数据交换格式 。
- 独立语言。
- 具有自我描述性,更易理解。
- 比xml更小更快更易解析。
3.长什么样:
语法格式:{"键1":"值1","键2":"值2","键3":"值3"}
{
"employees":[
{"name":"LinLin1","Lname":"CWO1"},
{"name":"LinLin2","Lname":"CWO2"},
{"name":"LinLin3","Lname":"CWO3"}
]
}
特征:
1.打印出来时,键和值的引用都带着双引号"",而字典打印出来时,键值都是单引号''。
2.数据类型:字典的数据类型是'dict',json的数据类型是'str'。
二、json数据类型转换
python与json的数据类型转换:
# load 字典,列表,或者其他类型
# json字符串 =======>python对象
# <=======
# dump
# 核心:生成字典和列表
# 数据类型转换
# python ===> json
# +------------------------------------+------------+
# | Python | json |
# +------------------------------------+------------+
# | dict | object |
# | list ,tuple | array |
# | str | string |
# | int,float,int-& float-derived Enums| number |
# | True | true |
# | False | false |
# | None | null |
# +------------------------------------+------------+
#
# json ===> python
# json转Python时,其它数据转换直接倒置上表即可,但number上却略微有点差别:
# +--------------+-------+
# | json | python|
# +--------------+-------+
# | number int | int |
# | number real | float |
# +--------------+-------+
三、json函数(四个常用)
1.与json相关的四个函数简介如下:
# json.load(fp) | 读取文件中json形式的字符串元素转化为Python类型
# json.loads(s) | 将已编码的 JSON 字符串解码为 Python 对象
# json.dump(obj,fp) | 将Python内置类型序列化为json对象后写入文件
# json.dumps(obj) | 将 Python 对象编码成 JSON 字符串
# 字典和json的区别在于json打印出来时是双引号,字典是单引号。
2.函数实践
使用前,先将json导入Python,再创建一个字典用于下面的实验。
import json
bdname={"word":"write","name":"xiaolin","school":"szschool","age":24,"tel":["21123456781","18138162444"],"sionly":True}
a. json.dumps
1) 语法格式及小实验
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
# 将 Python 对象编码成 JSON 字符串
jsonstring = json.dumps(bdname) # 将Python字典类型转换为json类型
print(bdname) # 字典的输出
print(type(bdname)) # 字典的数据类型鉴定
print(jsonstring) # json的输出
print(type(jsonstring))# json的数据类型检测
# 两者输出上的微小差别上面已经讲了,字典单引号,json双引号
输出:
>>> {'word': 'write', 'name': 'xiaolin', 'school': 'szschool', 'age': 24, 'tel': ['21123456781', '18138162444'], 'sionly': True}
>>> <class 'dict'>
>>> {"word": "write", "name": "xiaolin", "school": "szschool", "age": 24, "tel": ["21123456781", "18138162444"], "sionly": true}
>>> <class 'str'>
2) 相关参数使用:
# 相关的三个参数及实验如下:
# indent:格式化输出,通过观察,为控制缩进的东西。
jsonstring = json.dumps(bdname,indent=10)
print(jsonstring)
# 下面是输出:
{
"word": "write",
"name": "xiaolin",
"school": "szschool",
"age": 24,
"tel": [
"21123456781",
"18138162444"
],
"sionly": true
}
# +-------------------------------------------------+
# sort_keys=True:将键进行排序!
jsonstring = json.dumps(bdname,indent=10,sort_keys=True)
print(jsonstring)
# 下面是输出:
{
"age": 24,
"name": "xiaolin",
"school": "szschool",
"sionly": true,
"tel": [
"21123456781",
"18138162444"
],
"word": "write"
}
# +-------------------------------------------------+
# separators定义分隔符的类型
jsonstring = json.dumps(bdname,separators=('#','@@@'),indent="10")
print(jsonstring)
# 下面是输出:
{
10"word"@@@"write"#
10"name"@@@"xiaolin"#
10"school"@@@"szschool"#
10"age"@@@24#
10"tel"@@@[
1010"21123456781"#
1010"18138162444"
10]#
10"sionly"@@@true
}
b. json.loads
# 语法格式如下
# loads(s, *, cls=None, object_hook=None, parse_float=None,parse_int=None,parse_constant=None, object_pairs_hook=None, **kw)
# 将json类型转换为Python类型
python01 = json.loads(jsonstring)
print(python01)
print(type(python01))
输出:
>>> {'word': 'write', 'name': 'xiaolin', 'school': 'szschool', 'age': 24, 'tel': ['21123456781', '18138162444'], 'sionly': True}
>>> <class 'dict'>
c. json.dump
# 语法格式
# 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)
# 打开json文件并执行写入操作
with open(r"index.json","w+",encoding="utf-8") as wo:
json.dump(bdname,wo) # 将字典写入json,写入后json内部显示为json格式
# index.json文件内容展示:
{"name": "xiaolin", "school": "szschool", "age": 24, "tel": ["21123456781", "18138162444"], "sionly": true}
d. json.load
#语法格式
# load(fp, *, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
#load读取json文件内容,将json读取到Python,类型转为字典
# 补充json.json文件内容如下:
# {
# "employees":[
# {"name":"LinLin1","Lname":"CWO1"},
# {"name":"LinLin2","Lname":"CWO2"},
# {"name":"LinLin3","Lname":"CWO3"}
# ],
# "student":
# [
# {"name": "小明", "age": 11},
# {"name": "小红","age": 10}
# ],
# "classroom": {"class1": "room1", "class2": "room2"}
# }
# 打开json文件,执行读取操作
with open("json.json","r",encoding="utf-8") as wo:
x=json.load(wo)
print(x)
print(type(x))
# 访问刚读取的字典
w=x['employees']
for i in w:
print(i)
print(i['name'])
print(i['Lname'])
print(x["student"])
输出:
>>> {'employees': [{'name': 'LinLin1', 'Lname': 'CWO1'}, {'name': 'LinLin2', 'Lname': 'CWO2'}, {'name': 'LinLin3', 'Lname': 'CWO3'}], 'student': [{'name': '小明', 'age': 11}, {'name': '小红', 'age': 10}], 'classroom': {'class1': 'room1', 'class2': 'room2'}}
>>> <class 'dict'>
>>> {'name': 'LinLin1', 'Lname': 'CWO1'}
>>> LinLin1
>>> CWO1
>>> {'name': 'LinLin2', 'Lname': 'CWO2'}
>>> LinLin2
>>> CWO2
>>> {'name': 'LinLin3', 'Lname': 'CWO3'}
>>> LinLin3
>>> CWO3
>>> [{'name': '小明', 'age': 11}, {'name': '小红', 'age': 10}]