How to get POSTed JSON in Flask?

flask, json, post, python

Solution

First of all, the `.json` attribute is a property that delegates to the `request.get_json()` method, which documents why you see `None` here.

You need to set the request content type to `application/json` for the `.json` property and `.get_json()` method (with no arguments) to work as either will produce `None` otherwise. See the Flask `Request` documentation:

The parsed JSON data if `mimetype` indicates JSON (`application/json`, see `.is_json`).

You can tell `request.get_json()` to skip the content type requirement by passing it the `force=True` keyword argument.

Note that if an exception is raised at this point (possibly resulting in a 400 Bad Request response), your JSON data is invalid. It is in some way malformed; you may want to check it with a JSON validator.

Problem

I'm trying to build a simple API using Flask, in which I now want to read some POSTed JSON. I do the POST with the Postman Chrome extension, and the JSON I POST is simply `{"text":"lalala"}`. I try to read the JSON using the following method: ``` @app.route('/api/add_message/<uuid>', methods=['GET', 'POST']) def add_message(uuid): content = request.json print content return uuid ``` On the browser it correctly returns the UUID I put in the GET, but on the console, it just prints out `None` (where I expect it to print out the `{"text":"lalala"}`. Does anybody know how I can get the posted JSON from within the Flask method?

Original source

Related problems