python3基础 json模块

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

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

类型 编码后的类型
dict object
-list, tuple- -array>数组-
str, unicode string
int, long, float number
-True- -true-
False false
None null

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

json类型 python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null Nonel

举例


#字典
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__))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wdzjhh/article/details/95222249