2012-09-05 26 views
1

有一些我想用JSON序列化的嵌套對象。問題是某些屬性包含datetime s。當我嘗試序列這些pbjects,Python中拋出一個異常:獲取Python JSON以序列化日期時間

 
TypeError: datetime.datetime(2012, 6, 5, 17, 49, 35, 672115) is not JSON serializable 

使用Python 2.7,有沒有辦法告訴JSON序列:「當你看到一個日期,不要討厭,拋出一個異常,只是使用序列號:property.strftime('%Y-%m-%d %I:%M%p')

謝謝!

+0

可能重複[Python的JSON編碼器,支持日期時間?(http://stackoverflow.com/questions/12122007/python-json-encoder-to-support-datetime) – jdi

+0

可能的[Python和JavaScript之間的JSON日期時間]重複(http://stackoverflow.com/questions/455580/json-datetime-between-python-and-javascript) –

回答

4

您需要定義一個輔助函數,該函數將序列化datetime對象,並使用json.dump或json.dumps的default kwarg。查看帶有重複答案鏈接的評論。

此外,您還需要考慮是否支持時區知曉的對象。無論您想在序列化期間保留時區還是在序列化之前將其轉換爲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' 
相關問題