Python json转自定义类型对象 支持嵌套类型
2021-05-30 18:06
标签:attr 思路 cto python字典 object 类型 title rom classname 思路: 用法 Python json转自定义类型对象 支持嵌套类型 标签:attr 思路 cto python字典 object 类型 title rom classname 原文地址:https://www.cnblogs.com/alxed/p/14748080.html
字符串转json对象,json对象本质是字典,再把字典转自定义类型即可。
参考:python字典转对象
文章中没有实现嵌套类型,稍微改了一下class Dict(dict):
__setattr__ = dict.__setitem__
__getattr__ = dict.__getitem__
def dict_to_object(dictObj):
# 支持嵌套类型
if isinstance(dictObj,list):
insts=[]
for i in dictObj:
insts.append(dict_to_object(i))
return insts
if not isinstance(dictObj, dict):
return dictObj
inst=Dict()
for k,v in dictObj.items():
inst[k] = dict_to_object(v)
return inst
def json_to_object(json_str:str):
return dict_to_object(json.loads(json_str))
from typing import List
class Class:
def __init__(self):
self.ClassName:str=None
self.Mark:List[MarkItem]=[]
class MarkItem:
def __init__(self):
self.Name:str=None
self.Chinese:int=None
self.English:int=None
json_str = """{
"ClassName":"一班",
"Mark":[
{
"Name":"张三",
"Chinese":100,
"English":100
},
{
"Name":"李四",
"Chinese":99,
"English":99
}
]
}"""
obj:Class=json_to_object(json_str)
print(obj.Mark[0].Name)