728x90
반응형
질문 : "JSON 직렬화 가능하지 않은 datetime.datetime"을 극복하는 방법은 무엇입니까?
다음과 같은 기본 사전이 있습니다.
sample = {}
sample['title'] = "String"
sample['somedate'] = somedatetimehere
jsonify(sample)
시도하면 다음과 같은 결과가 나타납니다.
TypeError: datetime.datetime(2012, 8, 8, 21, 46, 24, 862000) is not JSON serializable
사전 샘플이 위의 오류를 극복 할 수 있도록 어떻게해야합니까?
참고 : 관련성이 없을 수도 있지만 사전은 mongodb
에서 str(sample['somedate'])
를 출력하면 출력은 2012-08-08 21:46:24.862000
입니다.
답변
원래 답변은 MongoDB "날짜"필드가 다음과 같이 표현 된 방식을 수용했습니다.
{"$date": 1506816000000}
datetime
을 json으로 직렬화하는 일반적인 Python 솔루션을 원한다면 @jjmontes의 답변 에서 종속성이 필요하지 않은 빠른 솔루션을 확인하십시오.
mongoengine (댓글 당)을 사용하고 pymongo가 종속성이므로 pymongo에는 json 직렬화를 돕는 내장 유틸리티가 있습니다.
http://api.mongodb.org/python/1.10.1/api/bson/json_util.html
사용 예 (직렬화) :
from bson import json_util
import json
json.dumps(anObject, default=json_util.default)
사용 예 (역 직렬화) :
json.loads(aJsonString, object_hook=json_util.object_hook)
Django는 이러한 종류의 올바르게 처리 DjangoJSONEncoder
https://docs.djangoproject.com/en/dev/topics/serialization/#djangojsonencoder 참조
from django.core.serializers.json import DjangoJSONEncoder
return json.dumps(
item,
sort_keys=True,
indent=1,
cls=DjangoJSONEncoder
)
DjangoJSONEncoder
와 다음과 default
사용하는 것의 차이점은 다음과 같습니다.
import datetime
import json
def default(o):
if isinstance(o, (datetime.date, datetime.datetime)):
return o.isoformat()
return json.dumps(
item,
sort_keys=True,
indent=1,
default=default
)
Django가 약간의 데이터를 제거합니까?
"last_login": "2018-08-03T10:51:42.990", # DjangoJSONEncoder
"last_login": "2018-08-03T10:51:42.990239", # default
따라서 어떤 경우에는 조심해야 할 수도 있습니다.
출처 : https://stackoverflow.com/questions/11875770/how-to-overcome-datetime-datetime-not-json-serializable
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬에서 추상 클래스와 인터페이스의 차이점 (0) | 2021.06.18 |
---|---|
Python 사전 검색 목록 (0) | 2021.06.18 |
파이썬의 자식 클래스에서 부모 클래스의 메서드를 호출하는 방법 (0) | 2021.06.16 |
pickle을 사용하여 dict을 저장하는 방법 (0) | 2021.06.14 |
파이썬에서 한 문자열을 다른 문자열에 추가하는 방법 (0) | 2021.06.09 |