繁体   English   中英

烧瓶接收杰森

[英]Flask receiving Post Json

我正在研究Flask Web应用程序,其中客户端以以下形式将数据发布到服务器:

{
"sess_id" : 1 ,
"annotations" :
[ {"tag_start" : "TIME","tag_end" : "TIME","tag" : "YOUR_TAG"}, {"tag_start" : "TIME","tag_end" : "TIME","tag" : "YOUR_TAG"}, {"tag_start" : "TIME","tag_end" : "TIME","tag" : "YOUR_TAG"}]
}

这是完整的Ajax帖子...

        $.ajax({
            url: 'http://127.0.0.1:5000/api/saveannotation',
            type: 'POST',
            headers: {'Content-Type' : 'application/json'},
            data: {'sess_id' : $('#sessionid_area').val(),
                'annotations': JSON.parse(annotations)},
            success: function(data) { alert(data.status); }
        });

所以我什至可以在api端看到这一点,它的定义如下:

@sessionapis.route('/saveannotation', methods=['GET', 'POST'])
@login_required
def save_annotation():
    rData = request.data
    if request.method == 'GET':
        return jsonify({'status' : 'success GET'})
    else:
        return jsonify({'status' : 'success'})

问题在于数据是“字节”类型,而不是字典。 我也无法调用request.json或request.get_json(silent = True),它返回“ 400错误请求”。

这是request.data中的示例:

b'sess_id=1&annotations%5B0%5D%5Btag_start%5D=2...

由于某种原因,它似乎是经过url编码的。 值也为空。 如果我选择做一些疯狂的事情,比如省去content-type = json; 我可以获得类似dict的内容,但是我必须非常奇怪地访问它。 我没有得到单个对象,而只是获得对所有属性的平面访问。

关于如何仅将json解析为合理对象的任何想法?

感谢您的提示!

仅传递JSON的内容类型标头实际上并不会使数据本身成为JSON。 您要么需要自己做,要么告诉jQuery。

$.ajax({
    url: 'http://127.0.0.1:5000/api/saveannotation',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({'sess_id' : $('#sessionid_area').val(),
        'annotations': JSON.parse(annotations)}),
    success: function(data) { alert(data.status); }
});

现在,您的数据将采用JSON格式,您可以使用request.get_json()将其作为Python字典获取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM