Flask:orjson 代替 json 模块进行解码

Ste*_*ger 6 python json flask jsondecoder

我正在使用烧瓶并且有很多请求。Flask 使用的 json 模块非常慢。我自动可以使用simplejson,但这有点慢,而不是更快。根据文档,我可以定义一个解码器(flask.json_decoder),但是 orjson 没有这个类。我只有功能加载和转储。有人可以解释一下,我如何用orjson交换 json 模块?最后我只想使用负载和转储功能,但我无法连接我的松散端。

小智 6

从Flask 2.2.0版本开始,您应该使用如下代码:

from flask.json.provider import JSONProvider
from flask import Flask
import orjson


class ORJSONProvider(JSONProvider):
    def __init__(self, *args, **kwargs):
        self.options = kwargs
        super().__init__(*args, **kwargs)
    
    def loads(self, s, **kwargs):
        return orjson.loads(s)
    
    def dumps(self, obj, **kwargs):
        # decode back to str, as orjson returns bytes
        return orjson.dumps(obj, option=orjson.OPT_NON_STR_KEYS).decode('utf-8')


app = Flask(__name__)
app.json = ORJSONProvider(app)
Run Code Online (Sandbox Code Playgroud)


yed*_*tko 5

一个非常基本的实现可能如下所示:

class ORJSONDecoder:

    def __init__(self, **kwargs):
        # eventually take into consideration when deserializing
        self.options = kwargs

    def decode(self, obj):
        return orjson.loads(obj)


class ORJSONEncoder:

    def __init__(self, **kwargs):
        # eventually take into consideration when serializing
        self.options = kwargs

    def encode(self, obj):
        # decode back to str, as orjson returns bytes
        return orjson.dumps(obj).decode('utf-8')


app = Flask(__name__)
app.json_encoder = ORJSONEncoder
app.json_decoder = ORJSONDecoder
Run Code Online (Sandbox Code Playgroud)