[Flask] Flask의 JSON encoder 설정하기

hukim·2020년 11월 29일
0

Flask

목록 보기
3/5

JSON으로 응답을 보내기 위해서는 데이터를 직렬화해서 보내야합니다.

하지만 json에서 표현할 수 있는 데이터는 한정이 되어 있고 모든 타입을 표현하지는 못합니다. Decimal이나 DateTime이 그 중 하나입니다.

flask에서는 jsonify()를 이미 제공하고 있고 json을 내보낼때 결국 어떤 객체에서 데이터를 가져오게 됩니다.

객체 내 형을 변환하거나 추가적으로 같은 내용의 다른 형의 변수를 두는 것도 방법이 되지만
flask에서는 app.json_encoder를 제공하고 있어서 jsonify()를 통해서 응답을 보낼 경우, 지정한 인코더를 통해서 생성되도록 만들 수 있습니다.

from decimal import Decimal

def custom_json_encoder(app):
	class CustomJsonEncoder(json.JSONEncoder):
            def default(self, obj):
                if isinstance(obj, Decimal):
                    return str(obj)
                if obj is None:
                    return str('')
                return super(CustomJsonEncoder, self).default(obj)

        app.json_encoder = CustomJsonEncoder

CustomJsonEncoder는 Decimal형을 문자열로 치환해서 보내주고 있고, None인 값에 대해서는 빈 문자열로 치환해서 보내주고 있습니다.

JsonEncoder를 활용하면, 타입에 따라서 json에서 표시할 때만 다르게 표시하는것이 가능합니다. 예를들면, datetime형의 경우 포맷(format)을 다르게 표현할 수 있는데 각 클래스에서 그것을 작업해주는게 아니라 일괄적으로 특정 포맷으로 변경해서 보낼 수도 있습니다.

출처 : http://blog.weirdx.io/post/45225

0개의 댓글