从序列化的 JSON 对象创建 Python 类定义?

问题描述 投票:0回答:1

我想做的是通过读取 JSON 文件在代码中创建 Python 类定义。 我不想用 Python 预先编写该类,然后使用 JSON 数据加载它。我想使用 JSON 文件来创建类定义的 Python 代码。我意识到不可能假设方法,但只要能够读取 JSON,然后自动在 Python 类定义中创建所有数据元素就很棒了。 例如,给定此 JSON(来自文件或流或任何地方):

{ “类型”:“软件”, "id": "软件--a1b2c3d4-5678-90ab-cdef-12345示例", “创建”:“2015-12-21T19:59:11Z”, "修改": "2015-12-21T19:59:11Z", “名称”:“Microsoft Word”, "cpe": "cpe:/a:microsoft:word:2013", "swid": "com.microsoft:word:2013", “语言”:[“en”], “供应商”:“微软”, “版本”:“2013” }

可以读取该内容并生成一个 Python 类定义来保存此类数据,类似于以下内容。 类软件: def init(自身、id、创建、修改、名称、cpe、swid、语言、供应商、版本): self.type =“软件” self.id = id self.created = 创建 self.modified = 已修改 self.name = 名字 self.cpe = cpe self.swid = swid self.languages = 语言 self.vendor = 供应商 self.version = 版本

def to_json(self):
    return {
        "type": self.type,
        "id": self.id,
        "created": self.created.strftime("%Y-%m-%dT%H:%M:%SZ"),
        "modified": self.modified.strftime("%Y-%m-%dT%H:%M:%SZ"),
        "name": self.name,
        "cpe": self.cpe,
        "swid": self.swid,
        "languages": self.languages,
        "vendor": self.vendor,
        "version": self. Version
    }

是否存在这样的工具或方法?如果存在,那会是什么。短暂性脑缺血发作。

我在搜索中发现的大部分内容都要求您已经定义了类定义,并且可用的方法将 JSON 反序列化为您已有的类的实例。我正在寻找基于 JSON 创建类定义。 我不久前看过 warlockvalideer ,但他们确实没有完成工作。

python json automation
1个回答
0
投票

这可能不完全是你想要的,但你可以尝试这个来解决你的问题:

import json

json_data = json.load(open('test.json', 'r'))

class AutoGeneratedVariables:
    def __init__(self,  **kwargs):
        for key in kwargs.keys():
            setattr(self, key, kwargs[key])

    def get_all_attrs(self):
        print(self.__dict__)

AutoGeneratedVariables(**json_data).get_all_attrs()

您的答案应该得到以下输出:

{'type': 'software', 'id': 'software--a1b2c3d4-5678-90ab-cdef-12345example', 'created': '2015-12-21T19:59:11Z', 'modified': '2015-12-21T19:59:11Z', 'name': 'Microsoft Word', 'cpe': 'cpe:/a:microsoft:word:2013', 'swid': 'com.microsoft:word:2013', 'languages': ['en'], 'vendor': 'Microsoft', 'version': '2013'}

如果您尝试打印

self.name
,它会给您“Microsoft Word”。

希望这能回答您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.