Python
Flask
curl
JSON

JSONでPOSTしたものをpythonで使う方法

自作API(flask使用)を試す時にcurlを使ってJSONをPOSTしようと思ったらハマったのでメモ

まずcurlを使ってデータをPOSTするのに

curl http://localhost:8000/post_data -X POST -H "Content-Type: application/json" --data '{"key": "value"}'

ってやったらb'{"key":"value"}'の形でPOSTされる。
最初はここをあまり詳しく見ていなくて

@app.route('/post_data', methods=['GET', 'POST'])
def check():
    if request.method == 'POST':
        data = request.data['key']

って使っていたのでエラーが出た。
curlのオプション指定が悪いのかなぁとか思ったけどこれ以外になさそうなので多分オプション指定は間違えていない。

@app.route('/post_data', methods=['GET', 'POST'])
def check():
    if request.method == 'POST':
        data = request.data.decode('utf-8')
        data = json.loads(data)
        img_url = str(data['key'])

って感じでbytes型をstringに変換してそこからjsonに変換して使用。