簡體   English   中英

Python - Flask - TypeError 類型的 Object 不是 JSON 可序列化的

[英]Python - Flask - Object of type TypeError is not JSON serializable

我是使用 Flask 的新手。所以,我一直在尋找答案,但找不到。

這是我的應用程序:

from flask import Flask, request
from flask_restful import Resource, Api
import pandas as pd
import numpy as np
from datetime import date

app = Flask(__name__)
api = Api(app)

class NasaTLX(Resource):
    def post(self):
        try:
            parametros = request.get_json()

            avaliado = parametros['avaliado']
            avaliador = parametros['avaliador']
            avaliador_assinatura = parametros['avaliador_assinatura']
            setor_dep = parametros['setor_dep']

            # some calculations here
            return{ "Answer" : "Calculated successfully"}

       except Exception as e:            
        
           return {'Answer': e}

api.add_resource(NasaTLX, '/nasatlx')
if __name__ == "__main__":
    app.run(debug=True)

然后我收到錯誤:

TypeError: Object of type TypeError is not JSON serializable

完整錯誤:

127.0.0.1 - - [09/Jun/2022 21:58:24] "POST /nasatlx HTTP/1.1" 500 -
Traceback (most recent call last):
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask\app.py", line 2095, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask\app.py", line 2080, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask_restful\__init__.py", line 271, in error_router
    return original_handler(e)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask\app.py", line 2077, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask\app.py", line 1525, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask_restful\__init__.py", line 271, in error_router
    return original_handler(e)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask\app.py", line 1523, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask\app.py", line 1509, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask_restful\__init__.py", line 471, in wrapper
    return self.make_response(data, code, headers=headers)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask_restful\__init__.py", line 500, in make_response
    resp = self.representations[mediatype](data, *args, **kwargs)
  File "C:\Users\table\Documents\Ergo_API\NASA_API\ambiente_virtual\ambiente_virtual\lib\site-packages\flask_restful\representations\json.py", line 21, in output_json
    dumped = dumps(data, **settings) + "\n"
  File "c:\users\table\appdata\local\programs\python\python38\lib\json\__init__.py", line 234, in dumps
    return cls(
  File "c:\users\table\appdata\local\programs\python\python38\lib\json\encoder.py", line 201, in encode
    chunks = list(chunks)
  File "c:\users\table\appdata\local\programs\python\python38\lib\json\encoder.py", line 431, in _iterencode
    yield from _iterencode_dict(o, _current_indent_level)
  File "c:\users\table\appdata\local\programs\python\python38\lib\json\encoder.py", line 405, in _iterencode_dict
    yield from chunks
  File "c:\users\table\appdata\local\programs\python\python38\lib\json\encoder.py", line 438, in _iterencode
    o = _default(o)
  File "c:\users\table\appdata\local\programs\python\python38\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type TypeError is not JSON serializable

這是我從 Postman 打來的電話(Content-Type 已經設置為 application/json):

{
  "avaliado" : "Maria",
  "avaliador" :"Jesi",
  "avaliador_assinatura" : "Bruno",
  "setor_dep" : 8

}

我發現了一些與 flask.json.JSONEncoder 相關的東西,但我不知道如何實現它,即使那樣也能解決問題。

怎么解決這個問題?

謝謝你。

您應該返回jsonify()而不是 dict

示例代碼:

from flask import jsonify

# ...
exvar = "example"
return jsonify({"hello": exvar})

如果我創建資源類型並添加路由,我會遇到同樣的錯誤。

但是,如果我不使用資源類型直接添加路由,一切正常

app = Flask(__name__)
app.route(/someRoute)

這行得通。 我沒有看到 jsonify 錯誤

可能與我們如何初始化資源類型有關

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM