본문 바로가기
Python

[Python] object of type int32 is not json serializable

by ete-llorona 2022. 12. 27.

 

파이썬에서 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

 

TypeError: Object of type int32 is not JSON serializable | bobbyhadz

The Python TypeError: Object of type int32 is not JSON serializable occurs when we try to convert a numpy int32 object to a JSON string. To solve the error, convert the numpy int to a Python integer before converting it to JSON, e.g. `int(my_numpy_int)`.

bobbyhadz.com

 

댓글