[Python] Flask, TypeError: Object of type ndarray is not JSON serializable

    에러 내용

    Traceback (most recent call last): File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\app.py", line 2213, in __call__ return self.wsgi_app(environ, start_response) File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\app.py", line 2193, in wsgi_app response = self.handle_exception(e) File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\app.py", line 2190, in wsgi_app response = self.full_dispatch_request() File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\app.py", line 1487, in full_dispatch_request return self.finalize_request(rv) File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\app.py", line 1506, in finalize_request response = self.make_response(rv) File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\app.py", line 1820, in make_response rv = self.json.response(rv) File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\json\provider.py", line 215, in response f"{self.dumps(obj, **dump_args)}\n", mimetype=self.mimetype File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\json\provider.py", line 180, in dumps return json.dumps(obj, **kwargs) File "D:\anaconda3\envs\kogpt\lib\json\__init__.py", line 234, in dumps return cls( File "D:\anaconda3\envs\kogpt\lib\json\encoder.py", line 201, in encode chunks = list(chunks) File "D:\anaconda3\envs\kogpt\lib\json\encoder.py", line 431, in _iterencode yield from _iterencode_dict(o, _current_indent_level) File "D:\anaconda3\envs\kogpt\lib\json\encoder.py", line 405, in _iterencode_dict yield from chunks File "D:\anaconda3\envs\kogpt\lib\json\encoder.py", line 438, in _iterencode o = _default(o) File "D:\anaconda3\envs\kogpt\lib\site-packages\flask\json\provider.py", line 120, in _default raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable") TypeError: Object of type ndarray is not JSON serializable

     

    api 호출시 에러

     

    Flask로 API를 만들었는데 위와 같이 에러가 발생하였다. numpy.ndarray 구조로된 변수 결과를 리턴할 때 발생하는 에러로 우선 구글링하여 유사한 경험이 있는지를 서치하였다.

     

    스택오버플로우

    Python - Flask - Object of type TypeError is not JSON serializable

    jsonify()를 붙이라는 내용

     

     

    위 내용은 jsonify()를 붙이라고 되어 있는데 위와 같이 실행했을 때 동일한 에러는 발생하지 않고, except로 곧장 연결되었다. 한마디로 아직은 해결이 되지 않은 상태...

     

     

    ChatGPT 문의

    ChatGPT에게 물어보니 아래와 같이 하라고 제안하였다.

     

    jsonify를 사용하되, .tolist()를 사용하는 것. 그래서 Return 구조를 아래와 같이 변경하였고, 이상없이 결과는 출력되었다.

     

    return jsonify({
        'status':'success',
        'request':request,
        'response':job.tolist()
    })

     

    성공

     

     

    참고 자료

    [1] https://stackoverflow.com/questions/72568046/python-flask-object-of-type-typeerror-is-not-json-serializable

    반응형

    댓글

    Designed by JB FACTORY