JSON

作者: 猛犸象和剑齿虎 | 来源:发表于2019-06-17 11:18 被阅读32次
  • 如果在不同编程语言之间传递对象,必须把对象序列化为标准格式。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属性,它就是一个字典,用来存储实例变量。
(感觉还是不懂啊,太抽象了。)

相关文章

网友评论

    本文标题:JSON

    本文链接:https://www.haomeiwen.com/subject/loiofctx.html