PythonでJSONとdatetimeを扱う方法について説明します。Pythonの標準ライブラリjson.dump
は、辞書型のオブジェクトの内容をそのまま保存できますが、扱えるのは基本型のオブジェクトだけであり、datetimeオブジェクトなど時刻の情報をJSONファイルに保存するときは一度文字列に変換しなければなりません。
datetimeを文字列に変換する
datetimeオブジェクトを文字列に変換するには、strftime
メソッドを使用します。以下に例を示します。
from datetime import datetime
record_time = datetime.now()
obj = {
'RecordTime': record_time.strftime('%Y%m%d-%H%M%S')
}
このコードでは、現在の日時を取得し、それを'%Y%m%d-%H%M%S'
の形式の文字列に変換しています。
文字列をdatetimeに変換する
文字列からdatetimeオブジェクトを生成するには、strptime
メソッドを使用します。以下に例を示します。
from datetime import datetime
obj['RecordTime'] = datetime.strptime(obj['RecordTime'], '%Y%m%d-%H%M%S')
このコードでは、'%Y%m%d-%H%M%S'
の形式の文字列をdatetimeオブジェクトに変換しています。
JSONとdatetimeの相互変換
JSONとdatetimeの相互変換を行うには、JSONEncoder
を使用します。以下に例を示します。
from json import JSONEncoder
from datetime import datetime
class DatetimeJSONEncoder(JSONEncoder):
def default(self, o):
if type(o).__name__ == 'datetime':
return o.strftime('%Y%m%d-%H%M%S')
else:
return o
record = {
"singleTimestamp": datetime(2019, 1, 29, 19, 29, 2, 234680),
"listedTimestamps": [
datetime(2019, 1, 29, 19, 57, 2, 234693),
datetime(2019, 1, 29, 19, 47, 2, 234695),
datetime(2019, 1, 29, 19, 37, 2, 234697)
],
"nested": {
"timestamp": datetime(2019, 1, 29, 19, 31, 2, 234689)
}
}
with open('jsonencodertest.json', 'w') as fp:
json.dump(record, fp, indent=2, cls=DatetimeJSONEncoder)
このコードでは、DatetimeJSONEncoder
という新しいクラスを定義し、その中のdefault
メソッドでdatetimeオブジェクトを文字列に変換しています。そして、json.dump
メソッドのcls
引数にこのクラスを指定することで、JSONとdatetimeの相互変換を行っています。
以上がPythonでJSONとdatetimeを扱う方法です。これらの方法を活用することで、Pythonで日時の情報を効率的に扱うことができます。.