【Flask】フロントでUnexpected token!?

【Flask】フロントでUnexpected token!?

FlaskからJSONを返してAPIサーバー風に稼働させていたのですが、なぜかfetchしたJavaScript側でエラーが...なんだこれとなったのですが、バックエンドのPython側のミスでした。何気に気付きにくかったりするので、またミスしたときのために備忘録として残しておきます。

今回の環境がこちら

  • Python-3.8.6
  • Flask

エラー内容

今回起きたエラーがこちらです。

SyntaxError: Unexpected token o in JSON at position 1

予期せぬトークンが頭文字にあったらしいです。なんだこれ...
他の場所では特にエラーなかったのになぜここだけ...

Pythonの方を確認してみます。

Pythonのミス

単にPythonのミスでした。ミスの部分だけピックアップします。

@app.route('/test')
def test():
    obj = {
        'foo': 'bar',
    }
    
    return jsonify(obj)

何気にわかりにくいんです。

json.dumps()してなかった......

めっちゃくだらないミスで萎えますねこれ。

というわけで、return jsonifyする前にしっかりdictをjsonにダンプしておきます。

改良版が以下。

@app.route('/test')
def test():
    obj = {
        'foo': 'bar',
    }
    
    obj = json.dumps(obj)
    
    return jsonify(obj) 

これでもう、フロント側ではエラー起こさせません!!!!

簡単に直るけど、気付きにくいってやつです。Flask使ってJSONで通信するときは、フロント側でエラーが出たら、JSONを送っているバックエンドも確認すると良いでしょう。

今回はこれだけです!

タメになったらSHARE!!!