1

JSONを使用してシリアル化したいネストされたオブジェクトがいくつかあります。問題は、一部のプロパティにdatetimesが含まれていることです。これらのオブジェクトをシリアル化しようとすると、Pythonは例外をスローします。

TypeError:datetime.datetime(2012、6、5、17、49、35、672115)はJSONシリアル化できません

Python 2.7を使用して、jsonシリアライザーに次のように伝える方法はありますかproperty.strftime('%Y-%m-%d %I:%M%p')

ありがとう!

4

1 に答える 1

6

datetimeオブジェクトをシリアル化するヘルパー関数を定義し、json.dumpまたはjson.dumpsdefaultのkwargを使用する必要があります。重複する回答へのリンクを含むコメントを参照してください。

datetimeまた、タイムゾーン対応オブジェクトをサポートするかどうかを検討する必要があります。また、シリアル化中にタイムゾーンを保持するか、シリアル化の前にUTCに変換するか。

これは、シリアル化の前にUTCに変換することを想定した例です。これは、 python-dateutilライブラリに依存しています。

from dateutil.tz import tzutc

UTC = tzutc()

def serialize_date(dt):
    """
    Serialize a date/time value into an ISO8601 text representation
    adjusted (if needed) to UTC timezone.

    For instance:
    >>> serialize_date(datetime(2012, 4, 10, 22, 38, 20, 604391))
    '2012-04-10T22:38:20.604391Z'
    """
    if dt.tzinfo:
        dt = dt.astimezone(UTC).replace(tzinfo=None)
    return dt.isoformat() + 'Z'
于 2012-09-05T21:07:38.983 に答える