如何将包含内部类与静态属性的Python类转换为JSON?
解决Python类(含内部类与静态属性)转JSON的问题
你遇到的问题核心在于:jsonpickle这类工具主要面向对象实例的序列化,而你需要处理的是类本身的静态属性和嵌套内部类结构。要实现目标输出,需要手动遍历类结构,提取所需的静态属性和内部类,再转换为可JSON序列化的字典,最后用标准库json模块输出。
具体实现代码
from dataclasses import dataclass, asdict import json import inspect @dataclass class Attribute: name: str description: str class A: class B: attr1 = Attribute(name="attr1", description="description") attr2 = Attribute(name="attr2", description="description") class C: attr3 = Attribute(name="attr3", description="description") attr4 = Attribute(name="attr4", description="description") def convert_class_to_dict(cls): result = {} # 遍历类的所有属性 for attr_name, attr_value in cls.__dict__.items(): # 跳过类的内置属性(以__开头的) if attr_name.startswith('__'): continue # 如果是内部类,递归处理 if inspect.isclass(attr_value): result[attr_name] = convert_class_to_dict(attr_value) # 如果是Attribute实例,转成字典 elif isinstance(attr_value, Attribute): result[attr_name] = asdict(attr_value) return result # 转换A类为字典 class_dict = {"A": convert_class_to_dict(A)} # 输出格式化后的JSON print(json.dumps(class_dict, indent=4))
代码说明
- 递归遍历类结构:通过
inspect.isclass识别内部类,递归调用convert_class_to_dict处理嵌套的内部类。 - 处理Attribute实例:利用
dataclasses.asdict将Attribute类的实例直接转换为键值对字典。 - 过滤内置属性:跳过类的内置属性(如
__module__、__doc__),只保留自定义的内部类和静态属性。 - 格式化输出:使用
json.dumps的indent参数生成和你期望格式一致的缩进JSON。
运行结果
执行上述代码后,会输出:
{ "A": { "B": { "attr1": { "name": "attr1", "description": "description" }, "attr2": { "name": "attr2", "description": "description" } }, "C": { "attr3": { "name": "attr3", "description": "description" }, "attr4": { "name": "attr4", "description": "description" } } } }
内容的提问来源于stack exchange,提问作者BigL
相关产品推荐
相关产品推荐

