Python 从流中生成 JSON 文档

标签 python json ravendb

我有一个 REST API ( RavenDB's Query Streaming),它以 JSON 格式返回很多数据。一次性加载到内存和解析太多了:

问题在于,它不是“每行一个文档”,这会使它变得非常容易,而是在名为“结果”的字段中返回一个包含我们文档的字符串,如下所示:

{"Results":[
  {"Name":"Hello World"}
]}

我真正想做的是使用 python 的请求库来流式传输响应,如下所示:

r = requests.get('.../streams/query/Raven/DocumentsByEntityName?query=', stream=True)
for chunk in r.iter_content(chunk_size=512, decode_unicode=False):
    print chunk

但我想生成单独的 JSON 文档,这样就不必解析整个响应。一次生成一个 JSON 文档的最有效方法是什么?

最佳答案

json.load() 有一个可选的 object_pairs_hook 参数,您可以使用它。这个想法是捕获每个内部 dict ,从你的回调函数返回一个空的字典(或者可能是 None )以避免建立巨大的数据结构在内存中。

请记住,这不是性能优化:在我的测试中(使用 import simplejson as json),我发现虽然我可以节省内存,但使用钩子(Hook)检查每个元素使得解析实际上慢了好几倍。不过,如果您的内存力不足,总比没有好。

关于Python 从流中生成 JSON 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785846/

相关文章:

ravendb - RavenDB bundle 是否仍通过 NuGet 发布?

python - 如何在 re.sub 中附加/连接一个数字

python - 如何只对 4 位或更少数字的 Pandas 列进行字符串操作?

javascript - 使用 AJAX 和 JSON 将 JavaScript 数据发送到服务器并从服务器检索数据

javascript - 在不使用循环或 jQuery 的情况下获取数组或 JSON 中选择的选项值列表

php - ElasticSearch 从 0.90 更改为 1.1

c# - 从 Azure Blob 存储反序列化对象的最快方法?

python - 如何将图像渲染到模板?

python - Django 索引未考虑现有表

c# - 全文查询结果按分数排序不正确