Python类到Yaml / JSON [关闭]

问题描述 投票:2回答:2

我对YAML / JSON不满意。

我遗失了遗产。

是否可以将Python类的层次结构导出为YAML / JSON?

这样我就可以使用自己喜欢的IDE和自动完成来构建我的数据结构。

在我的情况下,结果应该输入SaltStack。但这根本与配置管理无关,因为结果应该是普通的YAML / JSON。

我想将类导出到yaml。总会有类,从不实例。至少这就是我今天的想法。

我认为使用这个约束是有意义的:除了属性之外,类不会有方法。并且只有get-properties,而不是set-properties。

我从jazxswpoi那里拿了json的例子

https://www.json2yaml.com/

以下是python语法中上面json的一个示例:

{
  "json": [
    "rigid",
    "better for data interchange"
  ],
  "yaml": [
    "slim and flexible",
    "better for configuration"
  ],
  "object": {
    "key": "value",
    "array": [
      {
        "null_value": null
      },
      {
        "boolean": true
      },
      {
        "integer": 1
      }
    ]
  },
  "paragraph": "Blank lines denote\nparagraph breaks\n",
  "content": "Or we\ncan auto\nconvert line breaks\nto save space"
}

上面只是简单介绍如何使用python类创建数据结构。

python json inheritance yaml salt-stack
2个回答
1
投票

你可以使用class json: data = ['rigi', 'better for data interchange'] class yaml: data = ['slim and flexible', 'better for configuration'] class object: key = 'value' array = [dict(null_value=None), dict(boolean=True), dict(integer=1)] class paragraph: data = 'Blank lines denote\nparagraph breaks\n' class content: data = '''Or we can auto convert line breaks to save space''' 。请注意,使用pickle的安全警告也适用于jsonpickle。如果要允许对任意对象进行de / serial化,则必须处理安全性问题。


1
投票

使用jsonpickle,扩展它来编写自定义类来解析Python类,如下所示。

由于您可以使用不同类型的对象,建议使用自定义编码器。

对于前者

json.Encoder

我不确定你是否在寻找json.dumps(str) # TypeError: Object of type 'mappingproxy' is not JSON serializable

jsonpickle

jsonpickle.dumps(str)
>>'{"py/type": "__builtin__.str"}'

jsonpickle.dumps(json.dumps)
>>'{"py/function": "json.dumps"}'

从dict_str转储到YAML。

import json
class ClassEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, type1):
            return obj.conversion
        # .type2
        # .
        # .type3
        # .
        # .so on
        # .
        return json.JSONEncoder.default(self, obj)

dict_str = json.dumps(class_object, cls=ClassEncoder)
© www.soinside.com 2019 - 2024. All rights reserved.