美文网首页
Python对象序列化和反序列化(json)(11)

Python对象序列化和反序列化(json)(11)

作者: 纳米君 | 来源:发表于2018-05-01 22:06 被阅读145次

序列化:把变量从内存中变成可存储或传输的过程。

Python中内置了pickle模块来实现序列化。

import pickle

d = dict(name='Bob', age=18)
# dumps()把任意对象序列化成一个bytes
print(pickle.dumps(d))

# 把对象序列化后直接写入文件中
with open('F:/dump.txt', 'wb') as f:
    pickle.dump(d, f)

# 从文件中读取内容
with open("F:/dump.txt", 'rb') as f:
    print(pickle.load(f))

pickle模块来实现序列化是Python独有的特性。如果要跨语言传递数据,就需要采用标准的格式,比如XML、json。采用json更方便快捷。
Python内置了json模块。

import json

# 序列化成json字符串
d1 = dict(name='ABC', age=20)
print(json.dumps(d1))
print(json.loads(json.dumps(d1)))

with open('F:/json.txt', 'w') as f:
    json.dump(d1, f)

with open('F:/json.txt', 'r') as f:
    print(json.load(f))

一般更多的,我们要对class进行序列化,可以定义一个defalut方法。看下面代码:

class People:

    # __slots__ = ('name', 'age')

    def __init__(self, name, age):
        self.name = name
        self.age = age


def people2dict(p):
    return {
        'name': p.name,
        'age': p.age
    }


p = People('无敌', 18)
print(json.dumps(p, default=people2dict))

通常class的实例都有一个__dict__属性,它就是一个dict,用来存储实例变量,也有例外,比如定义了__slots__的class就没有__dict__属性。

所以上述序列化代码可以简写为:

print(json.dumps(p, default=lambda obj: obj.__dict__, ensure_ascii=False, indent=2, sort_keys=True))

其中参数ensure_ascii=False才输出中文,否则输出Unicode编码。
indent=2格式化json,大小代表缩进间隔。

如果要把json反序列化为对象呢?需要定义object_hook函数。

def dict2people(d):
    return People(d['name'], d['age'])


# 把json反序列化成对象
print(json.loads(json.dumps(p, default=people2dict), object_hook=dict2people))

相关文章

  • DRF之序列化

    序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象。 序列化两大...

  • iOS JSON 数据解析

    (1)JSON数据->OC对象(反序列化) (2)OC对象->JSON对象(序列化) (3)OC对象和JSON数据...

  • python序列化与反序列化

    json序列化与反序列化 序列化:dumps()/dump(),将python中字典类型的对象序列化后,转化成js...

  • 序列化和反序列细节处理

    python 中pickle 和 json 都是序列化和反序列化的模块。 关于序列化和反序列化 序列化和反序列化[...

  • Python基础之JSON

    作用 对Python对象进行序列化,便于存储和传输 Python对象与JSON字符串相互转换 Python对象转J...

  • 使用json模块

    json模块是python内置的用于序列化的模块。 序列化和反序列化 序列化就是将python类型的数据结构转换为...

  • 序列化,序列化高级

    序列化 序列化:把对象(Dict)转成可传输数据(JSON) 反序列化:把传输数据(json)转成对象(Dict)...

  • Python常用模块pickle——对象序列化

    作用 对Python对象进行序列化,便于存储和传输 Python对象序列化成bytes类型 pickle.dump...

  • Django 学习笔记

    [TOC] 学习路径 1. 序列化 对象处理 实例序列化 转json 2. 反序列化 恢复对象实例 (可选)序列化...

  • FastJson的基本使用实践

    序列化一个对象成为JSON字符串 反序列化一个JSON字符串成为一个对象 数组序列化成为JSON字符串 JSON字...

网友评论

      本文标题:Python对象序列化和反序列化(json)(11)

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