python에서 datetime 객체의 json 직렬화가 datetime 객체에 대해 즉시 작동하지 않는 이유는 무엇입니까?
datetime 객체에 대해 json 직렬화가 작동하지 않는 이유는 무엇입니까?json 시리얼화를 이해하고 있기 때문에 모든 오브젝트의 기본 아이디어는__str__
builtin 함수를 사용하여 응답으로 받은 개체를 urlencode합니다.그러나 datetime의 경우 다음과 같은 오류가 발생합니다.
TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable
가 있는 한__str__
즉, 이미 사용 가능한 오브젝트를 묶는 방법, 그러나 그것은 그것을 하지 않는 의식적인 결정처럼 보인다. 왜 그럴까?
아니, 그건 그렇게 되지 않아json
모듈.모듈에는 다음과 같은 기본 인코더가 있습니다.json.JSONEncoder
이 기능을 확장하여 구현해야 합니다.default
개체를 직렬화하는 메서드입니다.다음과 같은 경우:
import json
import datetime
from time import mktime
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return int(mktime(obj.timetuple()))
return json.JSONEncoder.default(self, obj)
print json.dumps(obj, cls=MyEncoder)
다른 사람들이 정확하게 지적했듯이, 그 이유는 json의 표준이 날짜 시간을 어떻게 나타낼 수 있는지를 규정하지 않기 때문입니다.
어떻게 연재하길 원하십니까?
JSON은 날짜를 처리하는 방법을 지정하지 않기 때문에 Python은json
라이브러리에서는 이러한 내용을 어떻게 나타낼지 결정할 수 없습니다.이는 상대편(브라우저, 스크립트 등)이 JSON에서 날짜를 어떻게 처리하느냐에 따라 완전히 달라집니다.
json 모듈을 패치하여 날짜/시간을 지원하는 간단한 방법입니다.
import json
import datetime
json.JSONEncoder.default = lambda self,obj: (obj.isoformat() if isinstance(obj, datetime.datetime) else None)
평소처럼 json serialization을 사용합니다.이번에는 datetime이 isoformat으로 serialization 됩니다.
json.dumps({'created':datetime.datetime.now()})
결과: '{"created": '2015-08-26T14:21:31.853855'}'
자세한 내용과 주의 사항은 StackOverflow: Python과 JavaScript 사이의 JSON datetime에서 확인하십시오.
데이터 타임의 부호화와 디코딩을 실장하지 않고 취득하고 싶은 경우는, json_tricks 를 사용합니다.json_tricks 는 다양한 일반적인 타입의 부호화와 디코딩을 추가하는 래퍼입니다.설치만 하면 됩니다.
pip install json_tricks
다음에서 Import합니다.json_tricks
대신json
예:
from json_tricks import dumps, loads
json = dumps({'name': 'MyName', 'birthday': datetime.datetime(1992, 5, 23, 18, 38, 23, 37566)})
me = loads(json)
면책사항: 제가 만든 것입니다.왜냐하면 나도 같은 문제가 있었거든.
문자열화할 수 있는 모든 것을 자동으로 시리얼화하려면 표준 구현만으로 쉽게 실행할 수 있습니다.
dumps(obj, default=str)
단, 이 방법에는 단점이 있습니다.예를 들어, 불필요한 노력이 없으면 어느 것도 시리얼화 해제되지 않습니다.또한 (큰 numpy 배열의 함수 등) 어떤 것을 시리얼화하지 않고 대신 경고를 받고 싶은 경우도 있습니다.이 경우 이 방법은 무음 상태가 됩니다.
언급URL : https://stackoverflow.com/questions/10721409/why-does-json-serialization-of-datetime-objects-in-python-not-work-out-of-the-bo
'programing' 카테고리의 다른 글
$리소스에서의삭제메서드와삭제메서드의차이점 (0) | 2023.03.09 |
---|---|
테이블 내에 커스텀 요소가 있는 AngularJs ng-repeat이 이상하게 렌더링됩니다. (0) | 2023.03.09 |
jquery click이 Ajax 생성 콘텐츠에서 작동하지 않음 (0) | 2023.03.09 |
소품을 통해 제공되는 이미지가 로드되었을 때 감지하고 반응에서 상태를 변경하는 방법은 무엇입니까? (0) | 2023.03.09 |
각도 8 및 Json 가져오기 (0) | 2023.03.04 |