关于 Python 的对象序列化和反序列化? 如何从 json 字符串直接反序化为指定类实例?

2021-03-25 23:31:49 +08:00
 runner321
遇到两种常见的情况,之前写 java 很容易,但发现在 python 不方便。

Python Object => 序列化 => 字符串, 很多类型不支持

json 字符串 =》 反序列号 =》 指定类型的 Python Object, 目前没找到好的实现,有没有跟 java 的 Gson 、fastjson 类似的 Json 解析库
1661 次点击
所在节点    Python
5 条回复
ClericPy
2021-03-25 23:45:41 +08:00
不支持的是不能 pickle 的么, 那官方的办法确实不好办了(以前还考虑过把 pickle.dumps 的 base64 一波)

能给个例子什么的么, 如果是 JSON 的话, json.dumps 的 default 参数够用么, 没例子实在想象不到 Java 怎么整...
test0x01
2021-03-26 01:44:54 +08:00
pydantic
runner321
2021-03-26 09:54:58 +08:00
@ClericPy 我指的是 json,从 对象 => json 字符串 可以用 default 。

但反方向,从 json 字符串 =》 对象,有什么好的实现方式吗?

json.loads 没法直接反序列化到一个指定的类实例
no1xsyzy
2021-03-26 10:11:17 +08:00
所以 #2 说了 pip install pydantic

Model.parse_raw(json_str) 或者 Model.json()
abersheeran
2021-03-26 16:26:12 +08:00
pydantic 是 json <--> dict <--> obj 而且仅支持它写了的类型

楼主的需要应该用标准库里的 object_hook 参数解决。另外,随手给你搜了一下 “python parse json to obj” 第一个回答是 https://stackoverflow.com/questions/6578986/how-to-convert-json-data-into-a-python-object 楼主可以试试。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765210

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX