파이썬에서 json을 저장할 일이 있었는데, object of type int32 is not json serializable 오류가 발생했다.
이런 비슷한 오류가 자료형이 numpy의 int32, int64 이거나, datetime 일 경우에도 발생한다.
이는 json의 JSONEncoder가 numpy에서 제공하는 자료형을 기본값으로 변환하기 않기 때문에 발생하는 오류이다.
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer): # np.integer를 python의 int로 변환
return int(obj)
if isinstance(obj, np.floating): # np.floating을 python의 float로 변환
return float(obj)
if isinstance(obj, np.ndarray): # np.ndarray를 python의 list로 변환
return obj.tolist()
return json.JSONEncoder.default(self, obj) # 나머지는 기본값
이렇게 새로 만든 JSONEncoder인 NpEncoder를 json.dump()의 cls 부분에 적어주면 된다.
with open(file_name, 'w', encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent="\t", cls=NpEncoder)
추가적으로, ensure_ascii=False 는 한글이 깨짐 방지, indent="\t"는 탭으로 들여쓰기 이다.
json.dump() 는 파일에 바로 저장하고, json.dumps() 는 문자열로 저장한다는 차이가 있다.
참고: https://bobbyhadz.com/blog/python-typeerror-object-of-type-int32-is-not-json-serializable
'Python' 카테고리의 다른 글
[Python] Effective Python 2nd - PEP 8 스타일 가이드 (0) | 2022.12.31 |
---|---|
[Python] requirements.txt 생성 (0) | 2022.12.29 |
[Python] 오늘 날짜 기준 년/월/일 디렉토리 생성 (0) | 2022.12.27 |
댓글