Python其他知识目录
#json。数据交换使用json文件。 json是一个特殊的字符串。访问网站时返回json
定义:JSON(JavaScript Object Notation,JS对象表示法)是一种轻量级的数据交换格式。
特点:简单性和清晰的层次结构使 JSON 成为理想的数据交换语言。易于人读写,也易于机器解析和生成,有效提高网络传输效率。
在JS语言中,一切都是对象。因此,任何支持的类型都可以用 JSON 来表示,例如字符串、数字、对象、数组等。但是,对象和数组是两种特殊且常用的类型:
对象表示为键值对
数据以逗号分隔
大括号保存对象 方括号保存数组
序列化的简单定义:转为json格式。定义:转为json格式。
反序列化的简单定义:json格式转其他
注:
两种语言数据类型的差异是通过json进行交换的。
外层必须是字典或者列表,两种容器数据类型。
必须是双引号(因为Java等其他语言用双引号表示字符串,单引号不表示字符串)
json是字符串
json中没有元组。序列化元组后,元组就变成了列表;不能是集合,序列化集合时会报错。序列化支持类型可以在Python官方文档中介绍。
从现在开始,传递值时必须使用字典或列表
导入json tup=(1,2,3) a=json.dumps(tup) #json中不存在元组。序列化元组后,元组就变成了列表 打印(一) 打印(json.loads(a)) ---------------- 结果: [1、2、3] [1、2、3] 导入 jsonmset={1,2,3} #不能是集合,序列化集合时会报错。 打印(json.dumps(mset)) --------------结果; o.__class__.__name__) TypeError:类型为 'set' is 的对象不可 JSON 序列化
字典格式与json格式对比:
字典格式:
d = { 'a':123, 'b':{ 'x':['A', 'B', 'C'] } }
json格式
{ “a”:123, "b": { #必须是双引号(因为java等语言使用双引号来表示字符串,单引号不表示字符串) "x": ["A", “B”, “C”] } }
可以看到,Dictionary和JSON非常接近,Python中json库提供的主要功能也是两者之间的转换。
JSON(JavaScript Object Notation,JS对象标签)是一种轻量级的数据交换格式。 JSON的数据格式实际上是python中的字典格式,可以包含方括号括起来的数组,在python中是列表。
在python中,有专门处理json格式的模块——json和pickle模块
Json模块提供了四种方法:dumps、dump、loads、load
pickle模块还有四种功能提供:dumps、dump、loads、load
序列化:将python值转换为json格式字符串。
反序列化:将json格式字符串转换为python数据类型
1)#序列化,将python值转换成json格式字符串。序列化 json.dumps() True 变为 true。序列化 导入 json v = [12,3,4,{'k1':》 'v1' },正确,'asdf'] v1 = json.dumps(v) 打印(v1,类型(v1)) ----------------结果; [12、3、4、{"k1": " v1“}, true、"asdf"] <类 'str'> 2) 反序列化json.load(),将json格式字符串转换为python数据类型 导入 json v2 = '["mcw",123]' 打印(类型(v2)) v3 = json.loads(v2) 打印(v3,类型(v3)) ------------------结果;S'Str'> ['mcw', 123] <类' 列表
验证如下:dumps可以将大部分基本数据类型格式化为字符串
1) 字典序列化: 导入 json dic={"名称":"mcw" ,"年龄" :18} xu=json.dumps(dic) 打印(xu,类型(xu),类型(dic)) ---------------- 结果: {"姓名": "mcw", “年龄”:18} <类 'str'> <类 '字典' > ) 列表序列化和反序列化: 导入 json li=[1,2] xu=json.dumps(li) print(xu,类型(xu),类型(li)) fx=json.loads(xu) 打印(fx,类型(fx)) ------------ 结果:[1, 2] <类'str'> <班级'列表'> [1, 2] <类'列表'> 3)字符串序列化和反序列化: 导入 json mcwstr="小马" xu=json.dumps(mcwstr) 打印(xu,类型(xu),类型(mcwstr)) fx=json.loads(xu) 打印(fx,类型(fx)) ---------------结果; "小马"<班级'str'> <班级 'str'> 小马<类'str'> 4) 整数序列化和反序列化 导入 json mcwint=2 xu=json.dumps(mcwint) 打印(xu,类型(xu),类型(mcwint)) fx=json.loads(xu) 打印(fx,类型(fx)) --------------- 结果: 2 <类 'str'> <类 'int' > 2<类'int'> 5) 浮点序列化和反序列化 导入 json mcwfloat=2.03 xu=json.dumps(mcwfloat)打印(xu,类型(xu),类型(mcwfloat)) fx=json.loads(xu) 打印(fx,类型(fx)) -------------------- 结果: 2.03<类'str'> <类'浮动 '> 2.03<类'浮动' > 6) 布尔序列化和反序列化: 导入 json mcwbool=True xu=json.dumps(mcwbool) 打印(xu,类型(xu),类型(mcwbool)) fx=json.loads(xu) 打印(fx,类型(fx)) -------------------------------- 结果: true<类'str' > <class 'bool '> 正确 <类 'bool'> 7)无序列化和反序列化 导入 json mcwnone=无 xu=json.dumps(mcwnone) 打印(xu,类型(xu),类型(mcwnone)) fx=json.loads(xu) 打印(fx,类型(fx)) ---------------结果; null<类'str'> <类'NoneType '>无 <类 '无类型'>
导入json v = {'k1':'alex' ,'k2' :'魔鬼变了'} 打印(json.dumps(v)) val = json.dumps(v,ensure_ascii=False) 打印(值) -------------------- 结果: {"k1": "alex", “k2”:"\u9b54\u964d\u98ce\u4e91\u53d8"} {"k1": "alex", “k2”:》魔鬼征服风暴》}
序列化:
导入json v = {'k1':'yh' ,'k2' :'小马过河'} f =打开('xiaoma.txt',mode='w',编码=' utf-8') #如果文件不存在则生成 val = json.dump(v,f) 打印(值) f.close() ---------------- 结果: 没有任何#dump 序列化内容并将其写入打开的文件。
反序列化:
导入json f =打开('xiaoma.txt',mode='r ',编码='utf-8') 数据 = json.load(f) f.close() print(data,type(data))
----------------结果:
{'k1': 'yh', 'k2': '小马过河'}
参考:
1) https://www.gsm-guard.net/tjuyuan/p/6795860.html
2) http://www.gsm-guard.net/python/python-json.html
3) https://www.gsm-guard.net/article/139498.htm