我试图使用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吗?


当前回答

{
  "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

其他回答

假设您已经发布了有效的JSON,

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

尝试在get_json()方法中将force属性设置为True来解决此问题。

request.get_json(force = True)

尽管我在这里遇到的所有答案都是正确的。有一件事我认为应该做,作为更好的实践。我是这样写的。

from flask import app, request, Flask, jsonify


@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
    
    # Check if the request method is POST
    if request.method == 'POST':
        # content will return eather parse data as JSON
        # Or None incase there is no data
        content = request.get_json()
        print(content)
        # The content could be displayed in html page if serialized as json
        return jsonify(content) # Return null if there is content

    # if it is only get request then just return uuid
    return uuid

假设您已经发布了带有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)

可以使用以下代码:

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

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

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