You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将包含内部类与静态属性的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))

代码说明

  1. 递归遍历类结构:通过inspect.isclass识别内部类,递归调用convert_class_to_dict处理嵌套的内部类。
  2. 处理Attribute实例:利用dataclasses.asdict将Attribute类的实例直接转换为键值对字典。
  3. 过滤内置属性:跳过类的内置属性(如__module__、__doc__),只保留自定义的内部类和静态属性。
  4. 格式化输出:使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:51:10