Json 模組補充

2022-07-17 05:30:19 字數 2688 閱讀 1327

import

json

from datetime import

datetime, date

#res =

#第一次序列化

#print(json.dumps(res)) # typeerror: object of type 'datetime' is not json serializable

#因為datetime.today()和date.today()是物件,不在json序列化的範圍內

#方法一:

#將字典中的值變成可序列化型別,可以手動轉成字串格式

#res1 = 'datetime.today()'

#res2 = 'date.today'

#res =

#第二次序列化

#print(json.dumps(res)) #

#因為json可以預設可以轉化的資料型別包含字串,所以在轉換之後就可以正常序列化了

#但是方法過於low bee

#所以 >>> 方法二:

'''分析步驟:

我們要序列化的內容中有datetime.today()這個物件,而dump不支援物件的序列化所以就檢視dump方法的原始碼,發現裡面有個cls=none的引數,表明你傳入的物件預設沒有類,並且返回的是cls=jsonencoder說明此時cls繼承於jsonencoder,所以我們進一步去jsonencoder裡面檢視原始碼

在jsonencoder類裡面發現乙個default方法與第一次序列化時候的報錯型別一樣,所以我們可以通過修改default方法來達成我們的目的

因為jsonencoder屬於json模組的,所以繼承的時候要寫json.jsonencoder

'''class myjson(json.jsonencoder): #

定義乙個自己的類,並為其指定父類

def default(self, o): #

重新定義父類中的default方法 o代表傳入的引數

if isinstance(o, datetime): #

判斷如果傳入的物件o屬於datetime類,則返回o物件的格式化時間,並且python預設輸出值是字串(間接轉為字串)

return o.strftime('

%y - %m - %d %x')

elif isinstance(o, date): #

判斷如果傳入的物件o屬於date類,則返回o物件的格式化時間,並且python預設輸出值是字串(間接轉為字串)

return o.strftime('

%y - %m - %d')

else: #

物件o既不屬於datetime,也不屬於date類,那麼就預設使用父類中的方法,所以在這裡就再次呼叫父類的方法,並且需要傳入引數

return

super().default(self, o)

res =

#第三次序列化

print(json.dumps(res, cls=myjson)) #

#序列化成功

json可序列化的python資料型別有:

| python            | json          |

+***************====+***************+

| dict | object |字典資料型別

+-------------------+---------------+

| list, tuple | array |列表,元祖資料型別

+-------------------+---------------+

| str | string |字串資料型別

+-------------------+---------------+

| int, float | number |整型和浮點資料型別

+-------------------+---------------+

| true | true |布林值 true

+-------------------+---------------+

| false | false |布林值 false

+-------------------+---------------+

| none | null +

python pickle模組 json模組

python 在在程式執行過程中,所有的變數都是在記憶體中,記憶體中的變數可以通過命令操作隨意改變,一旦程式結束,變數所占用的記憶體會被系統全部收回,如果沒有把修改的變數儲存到磁碟上,下次執行時,變數又被初始化,我們把在記憶體中可儲存或傳輸的過程叫做序列化pickling,把變數內容從序列化的物件重...

python充值模組 Python 模組補充

subprocess stdout 標準輸出 stdin 標準輸入 stderr 標準錯誤輸出 subprocess是os.system的公升級版,可以在python中執行shell命令,並且可以通過管道獲取stdout stdin stderr 1 importsubprocess2 這樣相當於執...

標準模組 json

python json dict object list,tuple array strstring int,float,int float derived enums number true true false false none null json 解碼為 python 型別轉換對應表 js...