将用户构建的 json 编码器传递到 Flask 的 jsonify

Posted

技术标签:

【中文标题】将用户构建的 json 编码器传递到 Flask 的 jsonify【英文标题】:Pass user built json encoder into Flask's jsonify 【发布时间】:2017-10-24 01:44:12 【问题描述】:

我想将我写的一个 numpy JSON 序列化程序传递给 Flask 的 jsonify 函数,但我找不到这样做的方法。我不能使用json.dumps,因为在处理错误消息时我必须设置 Flask 响应的 status_code。有没有办法将 JSON 序列化程序作为参数传入,类似于在 json.dumps 中使用 cls 参数,如下所示:Convert numpy type to 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

【问题讨论】:

【参考方案1】:

您可以使用app.json_encoder = JSON_Improved 自定义 Flask 应用的 json 编码器。 JSON_Improved 继承自 flask.json.JSONEncoder

class JSON_Improved(JSONEncoder):

    pass

https://web.archive.org/web/20190128005233/http://flask.pocoo.org/snippets/119 中有一个关于它的 Flask Snippets

【讨论】:

谢谢,很有用! sn-p 的链接已失效,因为所有 sn-ps 都已从烧瓶网站上删除。在他们的网站仓库上查看this issue。您可以通过web.archive.org/web/20190128005233/http://flask.pocoo.org/… 访问此 sn-p

以上是关于将用户构建的 json 编码器传递到 Flask 的 jsonify的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX 将 JSON 数据传递到 Flask 服务器? [复制]

通过 POST 将 JSON 编码的变量从 PHP 传递到 Javascript

将 JSON 编码的 PHP 变量传递给 HighCharts

如何将 JSON 对象传递给 Flask 中的模板?

在单元测试中将 JSON 发布到 Flask 端点时出现错误请求 [重复]

将 JavaScript 变量传递给 Flask url_for