zoukankan      html  css  js  c++  java
  • python json 序列化

    如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。


    JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
    JSON类型 Python类型
    {}      dict
    []      list
    "string"   'str'或u'unicode'
    1234.56   int或float
    true/false  True/False
    null      None
    Python内置的json模块提供了非常完善的Python对象到JSON格式的转换,都在json模块中

    1、使用dumps函数可以直接返回一个json格式的字符串,使用dump可以直接将json写入一个文件中对象中。

    2、使用loads函数可以直接将一个json格式的字符串反序列化为python对象,用load函数则可以直接从文件中读出字符串并将其反序列化。

    3、json可以直接序列化一个字典类型,只需要传入一个字典变量就可以了,但却不能这样自动序列化一个类对象,这就需要它的第二个default参数,这个参数指定一个函数,这个函数的作用就是将类对象属性转化为一个字典,并且每个类默认自带这个方法,就是__dict__,所以序列化类对象的格式如下:

    json.dumps(s, default=lambda obj: obj.__dict__)

    4、同样的道理,如果我们要把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict 转换为Student实例:

    def dict2student(d):
        return Student(d['name'], d['age'], d['score'])
    
    json_str = '{"age": 20, "score": 88, "name": "Bob"}'
    print(json.loads(json_str, object_hook=dict2student))

    运行结果如下:
    <__main__.Student object at 0x10cd3c190>
    打印出的是反序列化的Student实例对象。

  • 相关阅读:
    Binder机制,从Java到C (大纲)
    大陆台湾计算机术语比对
    关于nginx架构探究(2)
    关于nginx架构探究(1)
    关于开源中文搜索引擎架构coreseek中算法详解
    关于linux定时操作cron的理解
    sqlachemy 使用实例
    nginx+uwsgi+flask搭建python-web应用程序
    VC维
    关于zMPLS的设计解析
  • 原文地址:https://www.cnblogs.com/suntp/p/6495766.html
Copyright © 2011-2022 走看看