You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速将Django QuerySet转换为JSON格式?

优化Django大量QuerySet转JSON的性能

你的问题核心在于手动遍历QuerySet并构造字典时,每个迭代都会创建完整的Users模型实例,这在7万条数据的规模下会产生巨大的性能开销。下面是几个直接有效的优化方案:

  • 用values()直接获取字典格式结果
    这是最见效的优化,跳过模型实例化步骤,直接从数据库查询出字典结构的数据:

    queryset = Users.objects.values('id', 'name')
    return JsonResponse(list(queryset), safe=False)
    

    values()返回的是ValuesQuerySet,本质是字典的迭代器,转成列表后序列化的开销比手动构造字典小得多,能把序列化时间从几秒压缩到几百毫秒内。

  • 流式返回避免内存过载
    如果7万条数据一次性加载到内存有压力,或者想让前端更快开始接收数据,可以用StreamingHttpResponse流式输出JSON:

    from django.http import StreamingHttpResponse
    import json
    
    def stream_users():
        queryset = Users.objects.values('id', 'name').iterator()
        yield '['
        first_item = True
        for item in queryset:
            if not first_item:
                yield ','
            yield json.dumps(item)
            first_item = False
        yield ']'
    
    return StreamingHttpResponse(stream_users(), content_type='application/json')
    

    这种方式不需要把所有数据都加载到内存再序列化,边迭代边输出,既能节省服务器内存,也能提升前端的响应体验。

  • 用更快的JSON序列化库
    Python标准库的json序列化速度一般,换成C实现的ujson能进一步提升性能:
    先安装依赖:pip install ujson
    然后修改代码:

    import ujson
    from django.http import HttpResponse
    
    queryset = Users.objects.values('id', 'name')
    serialized_data = ujson.dumps(list(queryset))
    return HttpResponse(serialized_data, content_type='application/json')
    

    ujson的序列化速度比标准库快2-5倍,适合处理大规模数据的序列化场景。

内容的提问来源于stack exchange,提问作者Beto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:31:06