flask/python Error : TypeError: Object of type 'Decimal' is not JSON serializable

에러 상황은 다음과 같습니다.

1. Falsk 웹 페이지 개발 중, AJAX를 통해 데이터 요청함.

2. 요청이 들어오면 MySQL 쿼리문으로 데이터 검색 후, 결과 값을 Json 타입으로 반환해서 return

3. 이때 에러 발생!  TypeError: Object of type 'Decimal' is not JSON serializable

 

이상한건, 쿼리문이나 검색 결과를 print()로 로그로 찍어봤을 땐 아무런 문제가 없었다는 것...

 

에러 내용은 TypeError: 'Decimal' 형식의 개체는 JSON을 직렬화할 수 없습니다. 인데 검색결과는 잘나오니까 뭐가 문제지?? 싶었다.그런데 쿼리 검색 결과를 로그로 잘 찍어보니, 검색내용 중에 곱하기 나누기등을 사용해서 퍼센트 구하는 공식이 있었는데 그 결과 값 때문에 타입을 mysql에서 사용하는 Decimal로 반환했던 것이다.

 

그래서 나는 간단하게 쿼리 검색결과를 그냥 추가하지 않고, str()로 한번 감싸주는 것으로 해결했다!

 

json_data = []
for result in rows:
     # json_data.append(result)
     json_data.append(str(result))
json_return=json.dumps(json_data, ensure_ascii=False)

 

또 다른 해결 방법 : 

https://stackoverflow.com/questions/31202956/json-typeerror-decimal34-3-is-not-json-serializable

 

JSON: TypeError: Decimal('34.3') is not JSON serializable

I am running an SQL query which returns a list of Decimals. When I try to convert this into JSON i get the type error. The query: res = db.execute(""" SELECT CAST ((SUM(r.SalesVolume)/1000.0) AS

stackoverflow.com