当通过发布请求发送有效的 json 数据时,Flask request.get_json() 返回 None [重复]

Posted

技术标签:

【中文标题】当通过发布请求发送有效的 json 数据时,Flask request.get_json() 返回 None [重复]【英文标题】:Flask request.get_json() returning None when valid json data sent via post request [duplicate] 【发布时间】:2018-08-07 04:52:04 【问题描述】:

使用烧瓶构建应用程序。该应用程序使用表结构来显示数据。它的部分功能是从用户指定的表行中收集数据。为此,我在执行一些 js 的每一行上放置了一个按钮。 js 从行中收集信息,使用 JSON.stringify() 转换为 json 对象并将发布请求发送到相关的烧瓶 url。

将 jsonified 对象的值从 js 文件记录到浏览器控制台表明它的格式正确。发布请求联系了正确的路由,但是 request.get_json() 函数在该路由的方法中返回 None 值。

我已经在烧瓶中设置了一条单独的路线进行测试。这是相关代码

来自 javascript

    function do_some_work(e) 
        var row_data = get_table_row_data(e);
        row_data = JSON.stringify(row_data);
        console.log(row_data);
        $.post("test", row_data);
    

get_table_row_data() 只返回一个带有键值对的对象。日志显示数据的 json 格式正确。

这里是python代码

#TODO
@application.route('/test', methods=['GET', 'POST'])
def test():
    data = request.get_json()
    print("data is "+format(data))
    return redirect(url_for('index'))

这里的数据显示为无

非常感谢任何帮助

【问题讨论】:

如果我理解正确,引用的帖子“如何在 Flask 中获取 POSTed json?”要求用户使用 get_json(),这是作者正在做的事情,结果却没有用。对我来说,这似乎不是一个重复的问题。 【参考方案1】:

request.json 它将返回 JSON 数据的字典。要获取值,请使用 request.json.get('value_name')。所以你的路线会是这样的

#TODO
@application.route('/test', methods=['GET', 'POST'])
def test():
    data = request.json
    print("data is " + format(data))
    return redirect(url_for('index'))

【讨论】:

已解决。它总是会像那样愚蠢。非常感谢 没问题,很高兴它解决了您的问题 呃,我的错。问题仍然存在并且相同 data = request.get_json(force=True) @PhilipButler 详细说明一下:'强制 - 如果设置为 True,则 mimetype 将被忽略',因此您进行的调用不包括 MIME 类型或错误的类型。您可以在请求中设置正确的 MIME 类型 ('application/json') 或将 'force' 设置为 'True',但是您需要确保它确实是您收到的 JSON。

以上是关于当通过发布请求发送有效的 json 数据时,Flask request.get_json() 返回 None [重复]的主要内容,如果未能解决你的问题,请参考以下文章

向 FCM API 发送请求时收到无效的 JSON 有效负载

邮递员原始数据有效,但表单数据不适用于节点中的 POST 请求

如何通过 HttpClient 在 POST 请求中将 JSON 数据作为正文发送

如何通过 Postman 以 JSON 格式在请求正文中发送对象数组?

当请求来自浏览器或在请求来自移动设备时发送JSON字典时呈现HTML

GET 请求在邮递员中有效,但在 Axios 中失败