Python json转自定义类型对象 支持嵌套类型

2021-05-30 18:06

阅读:537

标签:attr   思路   cto   python字典   object   类型   title   rom   classname   

思路:
字符串转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)

Python json转自定义类型对象 支持嵌套类型

标签:attr   思路   cto   python字典   object   类型   title   rom   classname   

原文地址:https://www.cnblogs.com/alxed/p/14748080.html


评论


亲,登录后才可以留言!