引言
如题,JSON 数据格式是当前主流的交互格式,今天就给大家讲解一下 python 怎么把数据转化成 Json 格式,然后 Json 格式的字符串怎么转换成 python 用到的格式。
其实 python 内置的 json 模块很好的解决了这些问题
json模块
我们来看一个示例,看下怎么将一个 dict 转成 json 格式
import json
d=dict(name='xiaoming',age=20,score=10)
j=json.dumps(d)
print(j)
实例展示:
我们发现,的确输出了
{"name": "xiaoming", "age": 20, "score": 10}
json格式的结果
json.dumps()方法为我们返回了一个json格式的str
和上一节讲解序列化一样,json.dump()方法能直接将json格式的str存入到file,这里就不过多展示了
而要把 json 的str 转化成 dict
那么其实使用loads()或者load()方法就可以了,同样也和反序列化是一样的,我们来看一下案例
loads()方法:把json字符转换成dict
load()方法:先加载文件,将文件中的字符串转换成dict
无疑,在这里,使用loads()方法是很合适的
上面,我们是使用 dict 和 json 完成的相互转化,而有的时候,我们还会用一个类实现和 json 的转换,但是,在用类和json转换时,需要提供一个转换方法才可以,我们来详细看一下
我们先看一个例子类 与 json 的转化
本来满怀期待的等待,但是却爆出了这么多错,不过别着急
还记得上文我说的吗?
需要给类提供一个转换方法才行,那么我们给他提供一个
这样就完美了,那么我们现在加的这个
default=转换方法名
有什么作用呢?
其实,它的作用就是让 json 模块知道我可以通过这个方法将这个类转化成一个可以转换成 json 的对象,然后就可以继续转换了。
否则,json 模块就认为这个类不是能够转换成 json 数据格式的对象,直接就报类型错误了
不过,这样写是不是很累,我每次想用一个类转成json,还得单独为他提供转化方法。。。
当然了,python是一个聪明的语言,他不会让你白白受苦的,我们可以下面这个方法让所有的类都能够轻松转化:
default=lambda obj: obj.__dict__
这句代码啥意思呢?
他的意思就是用一个基本上万能的转化方法,实现 “类转成dict”
因为基本上一个实例都有一个__dict__
属性,他就是一个dict,用来存储实例变量,但是也有少数例外,比如定义了__slots__
的class.
我们来演示一下:
这样就方便很多嘛
ok,说完了把一个类转换成json,下面说下怎么把json转成一个类
当然也是用到loads()
loads() 方法 首先会转换成一个 dict 对象,然后用我们传递的另一个转换函数来吧 dict 转成 Student
转换函数怎么传?
object_hook=转换函数名
我们来演示一下
总结
转换成json在以后用的很多,请多多练习,加油!!
网友评论