對(duì)python中Json與object轉(zhuǎn)化的方法詳解
python提供了json包來(lái)進(jìn)行json處理,json與python中數(shù)據(jù)類型對(duì)應(yīng)關(guān)系如下:

一個(gè)python object無(wú)法直接與json轉(zhuǎn)化,只能先將對(duì)象轉(zhuǎn)化成dictionary,再轉(zhuǎn)化成json;對(duì)json,也只能先轉(zhuǎn)換成dictionary,再轉(zhuǎn)化成object,通過(guò)實(shí)踐,源碼如下:
import json
class user:
def __init__(self, name, pwd):
self.name = name
self.pwd = pwd
def __str__(self):
return 'user(' + self.name + ',' + self.pwd + ')'
#重寫JSONEncoder的default方法,object轉(zhuǎn)換成dict
class userEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, user):
return {
'name': o.name,
'pwd': o.pwd
}
return json.JSONEncoder.default(o)
#重寫JSONDecoder的decode方法,dict轉(zhuǎn)換成object
class userDecode(json.JSONDecoder):
def decode(self, s):
dic = super().decode(s)
return user(dic['name'], dic['pwd'])
#重寫JSONDecoder的__init__方法,dict轉(zhuǎn)換成object
class userDecode2(json.JSONDecoder):
def __init__(self):
json.JSONDecoder.__init__(self, object_hook=dic2objhook)
# 對(duì)象轉(zhuǎn)換成dict
def obj2dict(obj):
if (isinstance(obj, user)):
return {
'name': obj.name,
'pwd': obj.pwd
}
else:
return obj
# dict轉(zhuǎn)換為對(duì)象
def dic2objhook(dic):
if isinstance(dic, dict):
return user(dic['name'], dic['pwd'])
return dic
# 第一種方式,直接把對(duì)象先轉(zhuǎn)換成dict
u = user('smith', '123456')
uobj = json.dumps(obj2dict(u))
print('uobj: ', uobj)
#第二種方式,利用json.dumps的關(guān)鍵字參數(shù)default
u = user('smith', '123456')
uobj2 = json.dumps(u, default=obj2dict)
print('uobj2: ', uobj)
#第三種方式,定義json的encode和decode子類,使用json.dumps的cls默認(rèn)參數(shù)
user_encode_str = json.dumps(u, cls=userEncoder)
print('user2json: ', user_encode_str)
#json轉(zhuǎn)換為object
u2 = json.loads(user_encode_str, cls=userDecode)
print('json2user: ', u2)
#另一種json轉(zhuǎn)換成object的方式
u3 = json.loads(user_encode_str, cls=userDecode2)
print('json2user2: ', u3)
輸出結(jié)果如下:
C:\python\python.exe C:/Users/Administrator/PycharmProjects/pytest/com/guo/myjson.py
uobj: {"name": "smith", "pwd": "123456"}
uobj2: {"name": "smith", "pwd": "123456"}
user2json: {"name": "smith", "pwd": "123456"}
json2user: user(smith,123456)
json2user2: user(smith,123456)
Process finished with exit code 0
以上這篇對(duì)python中Json與object轉(zhuǎn)化的方法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于PyInstaller各參數(shù)的含義說(shuō)明
這篇文章主要介紹了基于PyInstaller各參數(shù)的含義說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Python實(shí)現(xiàn)檢測(cè)服務(wù)器是否可以ping通的2種方法
這篇文章主要介紹了Python實(shí)現(xiàn)檢測(cè)服務(wù)器是否可以ping通的2種方法,本文分別講解了使用ping和fping命令檢測(cè)服務(wù)器是否可以ping通,需要的朋友可以參考下2015-01-01
Python?xlwt工具使用詳解,生成excel欄位寬度可自適應(yīng)內(nèi)容長(zhǎng)度
這篇文章主要介紹了Python?xlwt工具使用詳解,生成excel欄位寬度可自適應(yīng)內(nèi)容長(zhǎng)度,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
python實(shí)現(xiàn)點(diǎn)擊按鈕修改數(shù)據(jù)的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)點(diǎn)擊按鈕修改數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Pycharm搭建Django項(xiàng)目詳細(xì)教程(看完這一篇就夠了)
這篇文章主要給大家介紹了關(guān)于Pycharm搭建Django項(xiàng)目的詳細(xì)教程,想要學(xué)習(xí)的小伙伴看完這一篇就夠了,pycharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,需要的朋友可以參考下2023-11-11

