python学习笔记-tip52(io编程--JSON)

2018-10-19  本文已影响4人  黑键手记

引言

如题,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在以后用的很多,请多多练习,加油!!

上一篇 下一篇

猜你喜欢

热点阅读