Flask request.get_json()raise BadRequest

c8ib6hqw  于 2023-04-08  发布在  其他
关注(0)|答案(4)|浏览(225)

我有一个带有这个端点的Flask API:

@app.route('/classify/', methods=['POST'])
def classify():
    data = request.get_json()

当我用python发布一个请求时,一切都很好。
但是当我使用Postman时,我得到:

<class 'werkzeug.exceptions.BadRequest'> : 400: Bad Request

我用这两种方法发送了相同的JSON(我复制/粘贴它以确保)。我相当确信这个问题是由我的JSON中的一些“\t”引起的,这些“\t”是由Python转义的,而不是由Postman转义的。
有没有一种方法可以获取原始的json,并在应用程序中处理它(转义需要转义的内容)?或者有其他方法可以获取json?
编辑:这是一个不同的问题,从一个你建议作为重复,因为你建议使用get_json,这是在我的情况下的问题。

lhcgjxsq

lhcgjxsq1#

好的,你可以替换:
data = request.get_json(
执行人:

data = json.loads(request.data, strict=False) # strict = False allow for escaped char

requests.data 包含字符串格式的json,因此您可以处理需要转义的字符。

7uhlpewt

7uhlpewt2#

如果你的数据可能是空的,或者会引发一个错误的请求,请使用request.data而不是request.get_json()

bxgwgixi

bxgwgixi3#

如果你收到400 Bad Requestfailed to decode json object: expecting value: line 1 column 1 (char 0),可能是因为你没有用json发送。
首先验证您使用return request.data获取请求。在postman中检查Content-disposition是否在json中。或者,使用print(request.is_json)
在Postman中使用request.get_json时,请确保将JSON作为raw请求发送。See this image, make sure to select raw and JSON from the dropdown in the body

inb24sb2

inb24sb24#

所有关于 AJAX 和flask从python文件模板发送数据的错误。
接收 AJAX json的所有数据。

data = request.get_json("")
    print(data)
    return "success!"
        
    Send data in ajax json.
    
    $(document).on('click','#texthide',function(){
            
        
            var text = $("#textVal").val();
            var font = $("#font_text").val();
            var color = $("#color_text").val();
            var start_text = $("#start_text").val();
            var end_text = $("#end_text").val();
            var vid_id = new_d
            console.log(text);
        
            $.ajax({
                url: '/videos/test_text',
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                datatype: "json",
              
                data: JSON.stringify(
                    
                {  text: $("#textVal").val(),
                    font: $("#font_text").val(),
                    color:  $("#color_text").val(),
                    start_text: $("#start_text").val(),
                    end_text: $("#end_text").val(),
                    video_id: new_d
                })
            });
        });

相关问题