Python 如何高效地将 JSON 反序列化为对象

2021-03-22 11:17:24 +08:00
 mimzy

现在通过 API 获取的 JSON,我一般先用 HTTPX.json() 方法转换为 Python 内置数据结构,然后用 Pydanticparse_obj_as() 转化为对象(因为 parse_obj_as() 可以很方便地转换 list ),便于使用 type hints 。

目前的链路是这样的:str -> dict/list -> Pydantic object,有点冗余,而且当 JSON 体积大到一定程度的时候,第二步比第一步慢一个数量级,已经无法接受。所以想了解下,有没有其他高效地将 JSON 反序列化为对象的方法?

4270 次点击
所在节点    Python
28 条回复
abersheeran
2021-03-22 14:40:38 +08:00
@mimzy 虽然我也是 pydantic 的重度使用者。
SystemLight
2021-03-22 14:44:58 +08:00
我感觉 marshmallow 这个库还挺好用的 https://github.com/marshmallow-code/marshmallow
Wicked
2021-03-22 15:46:58 +08:00
你要多快?找个 rapid json 之类的库自己封装一下?
mimzy
2021-03-22 18:35:21 +08:00
@abersheeran #20 虚假宣传哈哈哈~确实,像我现在用 FastAPI 有时候觉得还挺怀念 Django 的,啥速度不速度的,再快也超不过 Starlette 天花板,现成的工具又少…
abersheeran
2021-03-22 18:40:52 +08:00
@mimzy fastapi 速度还没 aiohttp 快呢。它的性能全靠吹。
misaka19000
2021-03-22 22:37:45 +08:00
我们用的 ujson,用了好几年了,效果挺好
wangyzj
2021-03-23 09:27:29 +08:00
大到一定体积是多大?
williamfzc
2021-03-23 15:41:59 +08:00
一样的问题,我们的需求是 xml -> json -> pydantic object,小文件完全 ok,文件变大之后问题会越来越明显,无论是速度跟内存占用都很爆表。前面的文本处理效率还能接受

之所以要用 python 主要是一些包调起来方便,现在已经准备慢慢用 java 重写了。。

@wangyzj 20M 左右就已经慢到不能接受了~

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

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

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

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

© 2021 V2EX