- 如果在不同编程语言之间传递对象,必须把对象序列化为标准格式。json表示出来就是一个字符串,可以被所有语言读取,也可以方便的存储在磁盘或者通过网络传输。json不仅是标准格式,并且比xml更快,而且可以直接在web页面中读取,非常方便。
- 入门
import json
d=dict(name='bob',age=20,score=88)
print(json.dumps(d))
结果:
{"age": 20, "score": 88, "name": "bob"}
反序列化:
import json
json_str='{"age": 20, "score": 88, "name": "bob"}'
print(json.loads(json_str))
结果:
{"age": 20, "score": 88, "name": "bob"}
- 进阶
python的dict对象可以直接序列化为json的{},不过很多时候我们更喜欢用class来表示对象。
import json
class Student():
def __init__(self,name,age,score):
self.name=name
self.age=age
self.score=score
def student2dict(std):
return{'name':std.name,'age':std.age,'score':std.score}
s=Student('BOB',20,88)
print(json.dumps(s,default=student2dict))
结果:
{"name": "BOB", "age": 20, "score": 88}
由于Student对象不是一个可序列化的json对象,所以专门写了一个转换函数用json的可选参数default=转换函数,default可以吧任意一个对象变成一个可序列化的json对象。
理解了这一步,我们将进一步简化。
class Student():
def __init__(self,name,age,score):
self.name=name
self.age=age
self.score=score
s=Student('BOB',20,88)
print(json.dumps(s,default=lambda obj: obj.__dict__))
把任意的class实例变成dict,通常class实例都有一个dict属性,它就是一个字典,用来存储实例变量。
(感觉还是不懂啊,太抽象了。)
网友评论