最近部分學(xué)員在學(xué)習(xí)python,對(duì)于python里面的有些內(nèi)容不是很了解仰坦,下面每天小猿圈python講師就會(huì)為大家準(zhǔn)備一個(gè)小的知識(shí)點(diǎn)履植,希望對(duì)你學(xué)習(xí)python有一定的幫助,今天為你分享的是Json與object轉(zhuǎn)化的方法悄晃。
Python提供了json包來進(jìn)行json處理玫霎,json與python中數(shù)據(jù)類型對(duì)應(yīng)關(guān)系如下:
一個(gè)python object無法直接與json轉(zhuǎn)化,只能先將對(duì)象轉(zhuǎn)化成dictionary妈橄,再轉(zhuǎn)化成json庶近;對(duì)json,也只能先轉(zhuǎn)換成dictionary眷细,再轉(zhuǎn)化成object拦盹,通過實(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
以上就是關(guān)于小猿圈python講師對(duì)Json與object轉(zhuǎn)化的方法蛾洛,希望本文所述對(duì)大家有所幫助,最后想要了解更多關(guān)于Python和人工智能方面內(nèi)容的小伙伴雁芙,請關(guān)注小猿圈在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Python開發(fā)環(huán)境搭建視頻轧膘,學(xué)習(xí)Python后的前景無限,行業(yè)薪資和未來的發(fā)展會(huì)越來越好的兔甘。