Ale*_*lex 8 python json numpy flask
我想传递一个我写入Flask jsonify函数的numpy JSON序列化器,但我找不到办法做到这一点.我无法使用json.dumps,因为我必须在处理错误消息时设置Flask响应的status_code.有没有办法将JSON序列化程序作为参数传递,类似于使用如下所示的cls参数json.dumps:将numpy类型转换为python?我的代码如下; 谢谢.
import json
import numpy as np
from flask import Flask, jsonify
class JSON_Improved(json.JSONEncoder):
'''
Used to help jsonify numpy arrays or lists that contain numpy data types.
'''
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(MyEncoder, self).default(obj)
app = Flask(__name__)
@app.errorhandler(ErrorMessage)
def handle_invalid_usage(error):
response = jsonify(error.to_dict())
response.status_code = error.status_code
return response
Run Code Online (Sandbox Code Playgroud)
Dmi*_*try 16
由于json_encoder在 Flask 2.2 中已弃用,并将在 Flask 2.3 中删除,因此以下更新可能有用。
该文档指出:
要使用不同的提供程序,可以子类化
Flask并设置json_provider_class为提供程序类,或者设置app.json为该类的实例。
因此,对于派生类,解决方案是:
class MyFlask(Flask):
json_provider_class = CustomJSONProvider
app = MyFlask(__name__)
Run Code Online (Sandbox Code Playgroud)
或者,在直接实例化类的情况下Flask,只需:
app = Flask(__name__)
app.json = CustomJSONProvider(app)
Run Code Online (Sandbox Code Playgroud)
给定已经定义的JSON_Improved编码器,样本类CustomJSONProvider将是:
from flask.json.provider import JSONProvider
class CustomJSONProvider(JSONProvider):
def dumps(self, obj, **kwargs):
return json.dumps(obj, **kwargs, cls=JSON_Improved)
def loads(self, s: str | bytes, **kwargs):
return json.loads(s, **kwargs)
Run Code Online (Sandbox Code Playgroud)
sta*_*mer 11
您可以使用自定义Flask应用程序的json编码器app.json_encoder = JSON_Improved.JSON_Improved继承自flask.json.JSONEncoder
class JSON_Improved(JSONEncoder):
pass
Run Code Online (Sandbox Code Playgroud)
http://flask.pocoo.org/snippets/119/上有一个关于它的Flask Snippets
| 归档时间: |
|
| 查看次数: |
3784 次 |
| 最近记录: |