Python的json不能序列化datetime型別資料問題
Python自帶的json.dumps方法序列化資料時候如果格式化的資料中有datetime型別資料時候會提示錯誤
TypeError: datetime.datetime(2012, 12, 12, 15, 47, 15) is not JSON serializable
import datetime
import json
def datetime_handler(x):
if isinstance(x, datetime.datetime):
return x.isoformat()
raise TypeError("Unknown type" )
搜尋出來的解決方案基本都是用Django的DjangoJSONEncoder來解決,為了一個簡單的辦法引入Django這個大傢伙實在有點不知所謂。不過這一點就體現了Django的資料多的優勢了
正在下決心是否乾脆下載了Django的程式碼去翻出DjangoJSONEncoder這個方法來的時候看到了官方文件中關於json.dumps方法的一個引數(cls)說明:
To use a custom JSONEncoder subclass (e.g. one that overrides the default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.
然後就看到了官方文件中的一個Demo:
>>> import json
>>> class ComplexEncoder(json.JSONEncoder):
... def default(self, obj):
... if isinstance(obj, complex):
... return [obj.real, obj.imag]
... return json.JSONEncoder.default(self, obj)
...
>>> dumps(2 + 1j, cls=ComplexEncoder)
'[2.0, 1.0]'
>>> ComplexEncoder().encode(2 + 1j)
'[2.0, 1.0]'
>>> list(ComplexEncoder().iterencode(2 + 1j))
['[', '2.0', ', ', '1.0', ']']
然後簡單擴充套件了一個JSONEncoder出來用來格式化時間
class CJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)
使用時候只要在json.dumps增加一個cls引數即可:
json.dumps(datalist, cls=CJsonEncoder)
相關推薦
Python的json不能序列化datetime型別資料問題
Python自帶的json.dumps方法序列化資料時候如果格式化的資料中有datetime型別資料時候會提示錯誤 TypeError: datetime.datetime(2012, 12, 12, 15, 47, 15) is not JSON se
python使用json序列化datetime型別問題處理
使用python的json模組序列化時間或者其他不支援的型別時會拋異常,例如下面的程式碼: # -*- coding: cp936 -*-from datetime import datetime import json if __name__=='__main__'
JavaScriptSerializer序列化成Json時DateTime型別資料的處理
JavaScriptSerializer在序列化時會將DateTime的資料序列化成類似\/Date(626543800000)\/這樣的值,找了很多方法都不如意,最後在一個部落格找到了完美的解決方法,地址:http://blog.calyptus.eu/seb/20
關於在Django中Json無法序列化datetime的解決辦法
ngs spec `` keys 定義 列表 ror 內置 cat 我們在網頁設計時經常會在前端和後臺進行交互,前端回傳的方法可以時redirect一個地址加上顯式的參數,第二個辦法就是使用Ajax結構。那麽在傳到view函數中進行處理後是需要通過Json格式進行
jQuery 序列化表單資料 jQuery 序列化表單資料 serialize() serializeArray()
【轉自】jQuery 序列化表單資料 serialize() serializeArray() 1.serialize()方法 格式:var data = $("form").serialize(); 功能:將表單內容序列化成一個字串。
thinkphp 模板格式化輸出datetime型別資料
原理 一,PHP時間戳函式獲取指定日期的unix時間戳 strtotime(”2009-1-22″) 示例如下: echo strtotime(”2009-1-22″) 結果:1232553600 說明:返回2009年1月22日0點0分0秒時間戳 二,PHP時間戳函式獲
向資料庫中插入日期時間datetime型別資料,資料庫中只有日期沒有時分秒
java.util.Date是不能直接插入資料庫中的,雖然它包含了日期和時分秒。 java.sql.Date可以直接插入資料庫,但是它只有日期而沒有時間; java.sql.Time可以直接插入資料庫,但是它只有時間,沒有日期 Java
JSON序列化與反序列化匿名型別
一、序列化匿名型別 1.序列化一個var型別 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Gon
java json序列化日期型別
做介面開發時經常需要給前端返回日期資料,比如生日、建立時間、更新時間等。我們一般是建一個bean,將定義所需要的欄位,並和資料庫的欄位相對應。雖然資料庫的欄位是日期型別的,但bean的欄位定義在String就行了,看下面的測試程式碼: package co
關於使用alibaba的ARouter 序列化bean,傳遞資料失敗的問題 解決
最近在專案中使用ARouter 時候遇到了一個困擾了我同事一個星期的bug,同事苦思奇想不得其解,找到了我,自認為這種bug,有那麼困難,於是就自己操作了一遍,發現我也傳值不過去,那怎麼解決了 使用ARouter 遇到的坑程式碼: ARout
Swagger使用GET連結訪問 出現“ObjectContent`1”型別未能序列化內容型別“application/xml; charset=utf-8”的響應正文錯誤
找到Swagger的配置檔案,然後在Register中加入 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 理論上來說就OK了。
jQuery 序列化表單資料 serialize() serializeArray()
1.serialize()方法 格式:var data = $("form").serialize(); 功能:將表單內容序列化成一個字串。 這樣在ajax提交表單資料時,就不用一一列舉出每一個引數。只需將data引數設定為 $("form").seri
django自定義序列化返回處理資料為null情況
在介面返回資料時,如果資料庫表中查詢出來的某些欄位為null時,在前端需要多處理一些資料異常的情況。 django可以自定義序列化返回處理,將返回的內容限制和預處理再返回到前端。 1.未處理時返回 如圖上,有email、mobile這兩個欄位是有可以為空且預設值為null的
C#程式設計向SQLite資料庫中正確寫入DateTime型別資料
最近用C#編寫了一個程式,裡面涉及向SQLite資料庫寫入DateTime型別資料,實際時間為2012/11/30 0:20:00,但寫入資料庫後變成1899/12/30 00:00:00。 實際情況是時間寫入資料庫失敗,1899/12/30 00:00:00是資料
Jackson 自定義序列化 & 反序列化 物件型別
public class JacksonUtils { private static final ObjectMapper mapper = new ObjectMapper(); public static final String CLASS_KEY
JavaScript:表單序列化後的資料轉換成json格式
表單序列化可以比較方便的拿到form表單中的資料,但是序列化後的資料是一段url字串.這邊利用方法轉化成json資料格式: var DataDeal = { //將從form中通過
Gson 反序列化Map型別的小問題
import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.u
資料byte形式備份儲存到本地檔案,反序列化讀取出資料恢復
前提: 需要備份的資料由介面 object轉換成byte[],備份儲存到本地檔案; 選擇本地檔案,取得資料 byte[]轉換成object,用於資料恢復。 步驟如下: 1.把物件(資料)list ( object ) 序列化並返回相應的位元組byte[] pub
解決Asp.net Mvc返回JsonResult中DateTime型別資料格式的問題
問題背景: 在使用asp.net mvc 結合jquery esayui做一個系統,但是在使用使用this.json方法直接返回一個json物件,在列表中顯示時發現datetime型別的資料在轉為字串是它預設轉為Date(84923838332223)
在Java中對mysql資料庫插入datetime型別資料
最近在做一個簡單的考勤系統的時候碰到了一個弄了我好久的問題,在我往資料庫中更新一條簽到時間的記錄的時候,我獲取的時間是沒有錯的,但是Hibernate往資料庫裡面插入的時候資料的時候,控制檯報了一大堆錯誤,而資料庫裡面也是沒有任何資料被更新的。。這就引發了異常D