python3基础 json模块

方法解释
json.dumpus()将 Python 对象编码成 JSON 字符串
-json.loads()--将字符串编码为一个python对象-
json.dumpu()将python对象序列化到一个文件,是文本文件,相当于将序列化后的json字符写到一个文件
json.load()从文件中反序列化出python对象

各类型的转换成json 后的对照表

类型编码后的类型
dictobject
-list, tuple--array>数组-
str, unicodestring
int, long, floatnumber
-True--true-
Falsefalse
Nonenull

json 类型转换到 python 的类型对照表

json类型python
objectdict
arraylist
stringunicode
number(int) int, long
number(real) float
trueTrue
falseFalse
nullNonel

举例


#字典
dir = {'name': "heqiang", 1: 123}
f = json.dumps(dir)
print(f)
#结果 {"name": "heqiang", "1": 123}
#print(f["name"]) #这里注意如果不用loads 反序列化一下这里是不可以像字典一样切出值的,还会报错
d=json.loads(f) #反序列出python对象
print(dir[1])  #这里就可以切出dir key的值 注意转换后这里的1就变成了字符串
#结果  123
print(d["1"])  #转换后就变成字符串了
#结果 123


#列表 和元组 转换成json字符串
list=[1,2,3]
js=json.dumps(list)
print(js)
li=json.loads(js)
print(li)
元组 =(1,2,2,3)
数组=json.dumps(元组)
print(数组)
#结果 [1, 2, 3] 注意此事显示的是方括号
b=json.loads(数组)
print(b) #这里可以看出 元组解码回来就变成了列表类型了,这里注意
#结果 [1, 2, 2, 3] 这里是列表

python 类型和json类型对比

在这里插入图片描述

参数

json.dumpus(self,sort_keys=True)是否按字典排序(a到z)输出,默认编码成json格式字符串后,是紧凑输出,并且也没有顺序的,不利于可读。sort_keys等于True表示升序
json.dumpus(self,sort_keys=True,indent=3)根据数据格式缩进显示,读起来更清晰,indent的数值表示缩进的位数

在这里插入图片描述
separators
去掉逗号“,”和冒号“:”后面的空格。从上面的结果中可以看出‘, :’后面都有个空格,这都是为了美化的作用,但是在传输的过程中,越精简越好,冗余的东西去掉,因此就可以加上separators参数对传输的json串进行压缩。该参数是元组格式的。

data=[{'a':'A','b':(2,4),'c':3.0}]
print (json.dumps(data))
print (json.dumps(data,separators=(',',':')))

在这里插入图片描述
shipkeys
在编码的过程中,dict的对象只能是基本数据类似(int,float,bool,None,str),如果是其它类型,那么在编码的过程中就会抛出ValueError异常。shipkeys可以跳过那些非string对象的key的处理,设置为True , 不是几百类型的就直接跳过不处理。
在这里插入图片描述
ensure_ascii
表示编码使用的字符集,默认是True,表示使用ascii码进行编码。如果设置为False,就会以Unicode进行编码。由于解码json字符串时返回的就是Unicode字符串,所以可以直接操作Unicode字符,然后直接编码Unicode字符串,这样会简单些。
在这里插入图片描述
default:将类对象编码成Json串
Python中的dict对象可以直接序列化为json的{},但是很多时候,可能用class表示对象,比如定义Employe类,然后直接去序列化就会报错。原因是类不是一个可以直接序列化的对象,但我们可以使用dumps()函数中的default参数来实现,由两种方法:

1.在类内部定义一个obj_json 方法将对象的属性转换成dict,然后再被序列化为json。
2.通过__dict__属性,通常class及其实例都会有一个__dict__属性(除非类中添加了__slots__属性),它是一个dict类型,存储的是类或类实例中有效的属性
代码示例:
在这里插入图片描述
示例2

class Employee(object):
      def __init__(self,name,age,sex,tel):
            self.name=name
            self.age=age
            self.sex=sex
            self.tel=tel

emp=Employee('kongsh',18,'female',13123456789)
print (emp.__dict__)
print (json.dumps(emp,default=lambda Employee:Employee.__dict__))
print (json.dumps(emp,default=lambda emp:emp.__dict__))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值