我试图使用Flask构建一个简单的API,在其中我现在想读取一些post JSON。我用邮递员Chrome扩展做POST, JSON I POST只是{"text":"lalala"}。我尝试使用以下方法读取JSON:

@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
    content = request.json
    print content
    return uuid

在浏览器上,它正确地返回我放入GET中的UUID,但在控制台上,它只是打印出None(我希望它打印出{"text":"lalala"})。有人知道我如何从Flask方法中获得发布的JSON吗?


当前回答

给出另一种方法。

from flask import Flask, jsonify, request
app = Flask(__name__)

@app.route('/service', methods=['POST'])
def service():
    data = json.loads(request.data)
    text = data.get("text",None)
    if text is None:
        return jsonify({"message":"text not found"})
    else:
        return jsonify(data)

if __name__ == '__main__':
    app.run(host= '0.0.0.0',debug=True)

其他回答

{
  "uuid":1212121212,
  "text":"lalala",
  "comment":"",
  "signed_on":"2022-11-07 00:03:00"
}

您可以将上述数据作为json发送,并使用request.json在flask应用程序中获取它

from flask import request, Blueprint,flash,json

@app.route('/api/add_message/<uuid>', methods = ["GET", "POST"])
def testing(uuid):
    sync_data = request.json    
    josn_data = json.dumps(sync_data ,default =str)
    return josn_data

给出另一种方法。

from flask import Flask, jsonify, request
app = Flask(__name__)

@app.route('/service', methods=['POST'])
def service():
    data = json.loads(request.data)
    text = data.get("text",None)
    if text is None:
        return jsonify({"message":"text not found"})
    else:
        return jsonify(data)

if __name__ == '__main__':
    app.run(host= '0.0.0.0',debug=True)

可以使用以下代码:

@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
  content = request.json['text']
  print content
  return uuid

这是我得到json数据的截图:

您可以看到返回的是字典类型的数据。

假设您已经发布了带有application/ JSON内容类型的有效JSON,请求。json将有解析的json数据。

from flask import Flask, request, jsonify

app = Flask(__name__)


@app.route('/echo', methods=['POST'])
def hello():
   return jsonify(request.json)

你可以注意到这个要求。json或request.get_json()只在请求头中添加Content-type: application/json时有效。如果你无法改变客户端请求的配置,那么你可以像这样得到json的主体:

data = json.loads(request.data)