【发布时间】:2019-09-15 22:04:33
【问题描述】:
aiohttp 应用程序从外部资源获取 JSON,并需要使用它来执行另一个请求,并将 JSON 作为请求正文传递。
为了避免序列化/反序列化开销 ujson 被使用,然后 JSON 对象被传递以在后续请求中使用,而无需加载或转储。这可行,但无法以这种方式操作 JSON,只能转发。
可能没有反序列化就无法操作它,但由于使用了ujson,因此首先将对象反序列化为C对象。考虑到这一点,有没有一种方法可以在 C 级别继续操作该对象,而无需将其作为 Python 字典。一个示例操作是从 JSON 中删除键或使用原始 JSON 的一个子集创建一个新的 JSON。或者检查这个 JSON 中是否存在给定的键。
【问题讨论】:
-
如果您根本不操作 JSON,我不明白您为什么要使用 JSON 解析器 ujson。只需将其作为不透明字符串传递...?!但是,是的,如果您想在不完全取消/序列化它的情况下操作 JSON,那么流式 JSON 解析器/编码器可能就是答案;当您通过它进行流式传输时,您只需省略输出某些部分。但不能特别推荐任何东西。
-
@deceze 对令人困惑的声明感到抱歉,
ujson在不序列化/反序列化 JSON 对象时毫无用处,它可用于探索 JSON 操作。但问题是,当使用loads/dumps时,我失去了ujsonC 实现将整个对象放入 Python 字典的所有性能优势。我想留在 C 级别进行操作。
标签: python json serialization python-c-api ujson