使用 attrs 将 JSON 转换为 Python 类

Posted

技术标签:

【中文标题】使用 attrs 将 JSON 转换为 Python 类【英文标题】:Using attrs to turn JSONs into Python classes 【发布时间】:2018-07-26 07:18:07 【问题描述】:

我想知道是否可以使用 attrs 库将嵌套的 JSON 转换为 Python 类实例,以便我可以通过点符号 (object.attribute.nested_attribute) 访问该 JSON 中的属性。

我的 JSON 有一个固定的架构,我可以手动定义该架构的类,但我不确定是否可以将 JSON 转换为嵌套类结构而无需实例化每个嵌套对象单独。我基本上是在寻找一个 fromdict() 函数,它知道(基于键)将 JSON 对象转换为哪个类。

(我也知道还有其他方法可以构建“DotDicts”,但这些方法对我来说似乎总是有点老套,可能需要彻底测试以验证它们是否正常工作。)

【问题讨论】:

@deceze 我说我知道这些其他方法,我专门询问在 attrs 框架内执行此操作的方法。你介意在给它打一个“重复”之前阅读这个问题吗? @user8793 在这种情况下,我会建议您:请使用限制您使用 attrs 的限制更新您的问题。由于提供的重复链接中给出了很好的答案,这将为您提供您所请求的对象结构。 @deceze attrs (attrs.org/en/stable/index.html) 是一个用于简化 Python 类工作的库。很抱歉,如果你连问题的内容都不知道,为什么不继续前进? 如果您在问题中简单地提到“库”或“框架”一词以避免这种混淆,那将会有所帮助。为了记录,我不是唯一一个对此感到困惑的人,我对建议的副本采取了行动。考虑到你的问题可能不太清楚,不要把一切都归咎于无能。 @EdwinvanMierlo 我说过我不相信这些方法(手动构建“DotDict”类)能够真正涵盖生产环境中可能出现的所有边缘情况。由于 attrs 是一个完善的项目,其特定目标是涵盖所有这些边缘情况,我想知道它是否可以适应(或已经)与 JSON 一起工作。 【参考方案1】:

attrs wiki 目前有两个序列化库:

    cattrs 和related。

cattrs 由 attrs 最多产的贡献者之一维护。

我知道有些人也提到了与其他系统的集成。在这一点上,attrs 不太可能开发自己的解决方案,因为外部开发的看起来不错。

【讨论】:

以上是关于使用 attrs 将 JSON 转换为 Python 类的主要内容,如果未能解决你的问题,请参考以下文章

将 TypeScript 对象转换为 JSON

将 JSON 转换为元素树 [关闭]

使用php将mysql结果转换为数据透视表

如何将 jQuery 对象转换为 d3 对象?

如何格式化 XML 响应 - Python

我使用 JSON 转换器将 JSON 转换为 c# 时遇到问题