[英]Python/Flask - Object of type "TypeError' is not JSON serializable
[英]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.