python - Flask request.get_json() 返回字符串而不是 json

标签 python json flask

WindowsPython 3.6 64 位 上使用 Flask 1.0.2 首先,我通过 jquery ajax 调用发送数据,这在 JS 端是有效的 json

var myData = '{ "id": "' +clickedID +'" }'
$.ajax({
    type: "POST", // HTTP method POST or GET
    contentType: 'application/json; charset=utf-8', //content type
    url: $SCRIPT_ROOT + '/colors/delete', //Where to make Ajax calls
    dataType:'json', // Data type, HTML, json etc.
    processData: false,
    data:JSON.stringify(myData), 
});

在 Flask 中,我捕获 POST 请求并尝试解析它:

if request.method == "POST":
    print("got request method POST")
if request.is_json:
    print("is json")
    data_json = request.get_json(force=True)
    data_req = request.data
    print("{} is {}".format(data_req, type(data_req)))
    print("{} is {}".format(data_json, type(data_json)))
    data_json2 = json.loads(request.get_json(silent=True, force=True))
    print("{} is {}".format(data_json2, type(data_json2)))
    print (request.json.keys())

结果:

got request: POST
is json
b'"{ \\"id\\": \\"1\\" }"' is <class 'bytes'>
{ "id": "1" } is <class 'str'>
{'id': '1'} is <class 'dict'>
print (request.json.keys())
AttributeError: 'str' object has no attribute 'keys'

最佳答案

JSON.stringify() 接受一个 Javascript 对象并将其转换为 JSON 字符串。您不是向其传递一个对象,而是向其传递一个字符串,然后该字符串再次转换为 JSON。

由于请求数据包含双重编码的 JSON,因此 request.json 属性返回的是字符串而不是字典。

要修复,请更改:

var myData = '{ "id": "' +clickedID +'" }'

至:

var myData = { id: clickedID }

关于python - Flask request.get_json() 返回字符串而不是 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569816/

相关文章:

python - Django Rest框架序列化器: required_fields

python - 选择 pandas groupby 数据框的子集,其中多个键具有值

python - App Engine Django 表单唯一性验证?

javascript - 获取单个记录输出的内容多于记录内容,并且 json.parse 未记录正确的数据

java - GSON:如何从 json 解码为忽略对象的模型?

python - 使用flask-wtf queryselectfield进行更具体的SQL查询

Python:将csv文件读入列表和数组中

ios - 尝试读取已解析的 JSON 数组时索引超出范围

python - Flask - 上传的图像未显示 - 给出 404

python - 如果我的 mysql 套接字不在/tmp 中,是否可以将 Mysql 与 SqlAlchemy 和 Flask 一起使用?