首页 - 技术 - python json模块使用详情

python json模块使用详情

2023-09-29 12:32

Python其他知识目录

#json。数据交换使用json文件。 json是一个特殊的字符串。访问网站时返回json

1。 json介绍:

定义:JSON(JavaScript Object Notation,JS对象表示法)是一种轻量级的数据交换格式。
特点:简单性和清晰的层次结构使 JSON 成为理想的数据交换语言。易于人读写,也易于机器解析和生成,有效提高网络传输效率。

在JS语言中,一切都是对象。因此,任何支持的类型都可以用 JSON 来表示,例如字符串、数字、对象、数组等。但是,对象和数组是两种特殊且常用的类型:
   对象表示为键值对
   数据以逗号分隔
   大括号保存对象   方括号保存数组
序列化的简单定义:转为json格式。定义:转为json格式。
反序列化的简单定义:json格式转其他

2。备注

注:
两种语言数据类型的差异是通过json进行交换的。
外层必须是字典或者列表,两种容器数据类型。
必须是双引号(因为Java等其他语言用双引号表示字符串,单引号不表示字符串)
json是字符串
json中没有元组。序列化元组后,元组就变成了列表;不能是集合,序列化集合时会报错。序列化支持类型可以在Python官方文档中介绍。
从现在开始,传递值时必须使用字典或列表

导入json
tup=(1,2,3)
a=json.dumps(tup) #json中不存在元组。序列化元组后,元组就变成了列表
打印(一)
打印(json.loads(a))
---------------- 结果:
[123]
[123]

导入 jsonmset={1,2,3} #不能是集合,序列化集合时会报错。
打印(json.dumps(mset))
--------------结果;
    o.__class__.__name__)
TypeError:类型为 'set' is 的对象不可 JSON 序列化

字典格式与json格式对比:
字典格式:

d = {
'a'123'b':{
'x':['A', 'B', 'C']
}
}

json格式

{
a123"b": { #必须是双引号(因为java等语言使用双引号来表示字符串,单引号不表示字符串)
"x": ["A",  “B, C]
}
} 

可以看到,Dictionary和JSON非常接近,Python中json库提供的主要功能也是两者之间的转换。

3。 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))
----------------结果;
[1234、{"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 '>< '无类型'>

4.json序列化时中文显示

导入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魔鬼征服风暴}

5.json.dump 和 json.load(不常用)

序列化:
导入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