반응형
아직 필자는 파린이(파이썬 초보)이기에 또 끄적 거린다.
json dump 모듈 사용시 아래와 같은 error 발생시에 따른 조치(?)방법이다.
TypeError: Object of type date is not JSON serializable
[ user_name@hostname:icon_backup ] $ ./json_test.py
Traceback (most recent call last):
File "./json_test.py", line 8, in <module>
json_data = json.dumps(data)
File "/Users/User/.pyenv/versions/3.7.10/lib/python3.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/Users/User/.pyenv/versions/3.7.10/lib/python3.7/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/User/.pyenv/versions/3.7.10/lib/python3.7/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/User/.pyenv/versions/3.7.10/lib/python3.7/json/encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type date is not JSON serializable
자세히는 설명이 어렵지만 해당 문제가 발생하는 원인은 필자의 경우 소스내에 date함수를 사용해서 발생하는 문제이다.
소스 뿐만 아니라 json data내에 날짜 변수로 된 data가 있을 경우에도 동일하게 발생된다.
예시)
<필자 test 소스>
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import datetime, json
today = datetime.date.today()
data = { 'date': today}
json_data = json.dumps(data) ### 여기서 TypeError 발생 되며 today라는 변수 때문임
print(json_data)
<jsondata> : s3 bucket list 중 일부
{
"bucket" : [
{'Name': 'test_s3', 'CreationDate': datetime.datetime(2020, 6, 10, 2, 12, 53, tzinfo=tzutc())},
{'Name': 'test_s3_1', 'CreationDate': datetime.datetime(2021, 3, 26, 7, 5, 13, tzinfo=tzutc())}
]
}
반응형
위와 같은 소스 및 데이터 일 경우 Error 가 발생한다.
조치 방법은 아래와 같다.
json.dumps(s3_data, default=str, indent=2)
json.dumps안에 default함수를 추가해 ("default=str") 주면 된다.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import datetime, json
from dateutil.tz import tzutc
today = datetime.date.today()
data = { 'date': today }
json_data = json.dumps(data, default=str, indent=2)
print(json_data)
결과
다른 블로그에는 "default=json_default"를 추가하라고 되어 있는데 "str" 대신 "json_default"를 사용할 경우 아래와 같은 오류가 발생한다. python version문제인거 같은데 아직 파린이인 필자는 잘은 모르겠다.
"NameError: name 'json_default' is not defined"
NameError: name 'json_default' is not defined
잘못된 부분이 있을 경우 댓글 달아 주시면 감사합니다.
반응형
'Development > Python3..x' 카테고리의 다른 글
[python3.x] intellij IDEA - ESC 키보드 비프음(beep) (0) | 2021.12.27 |
---|---|
[python3.x] pyenv로 설정한 python버전으로 정상동작되지 않을때 (0) | 2021.12.08 |
[Python3.x] 파일내 함수이름/라인번호/파일 번호 프린트 하기 (1) | 2021.09.30 |
[python3.x] ipython IDE 설치 (0) | 2021.06.05 |
[python3.x] pyenv 설정 오류 관련 (WARNING: `pyenv init -` no longer sets PATH.) (3) | 2021.06.05 |