python - 从 JSON 以编程方式分配类属性的最佳方法
问题描述
我正在制作的程序需要根据以 JSON 形式接收的信息,使用 SQLAlchemy 将用户存储在 SQLite 数据库中。我对用户的类定义是:
class User(Base):
__tablename__ = "users"
address = Column(TEXT, primary_key=True)
fullName = Column(TEXT)
nickName = Column(TEXT)
profilePictureId = Column(INTEGER)
bio = Column(TEXT)
online = Column(INTEGER)
lastSeen = Column(TEXT)
publicKey = Column(TEXT)
我将收到的 JSON 示例是:
{
"address": "aayla",
"publicKey": "key",
"bio" = "test bio",
}
这是我现在创建新User
对象的方式:
newUser = User(
address = data["address"]
publicKey = data["publicKey"]
...
)
我想做的是User
使用同名的 JSON 键的值自动填充我的类的属性。尽管我目前正在做的事情确实有效,但如果可能的话,我宁愿使用更加程序化的方法,以便在User
添加/更改事件属性时减少范围蔓延的痛苦。是否存在更自动的方式?
解决方案
这与 JSON 无关,至少在您将 JSON 解码为 Python 后不会dict
。完成此操作后,您可以简单地将值作为关键字参数传递(因为您的参数名称与原始 JSON 键匹配):
newUser = User(**data)
但是,这有点脆弱,除非您首先验证键名是有效参数。最好将其封装在类方法中。
class User(Base):
__tablename__ = "users"
address = Column(TEXT, primary_key=True)
fullName = Column(TEXT)
nickName = Column(TEXT)
profilePictureId = Column(INTEGER)
bio = Column(TEXT)
online = Column(INTEGER)
lastSeen = Column(TEXT)
publicKey = Column(TEXT)
@classmethod
def from_json(cls, data):
# Validate data's keys here, and extract only
# those values that User actually expects
address = data['address']
fullName = data['fullName']
...
return User(address, fullName, ...)
newUser = User.from_json(data)
推荐阅读
- base64 - 通过 REST API documentBase64 附加记录错误 - 即使是小文件
- android - 如何设置动态文本以从自定义键盘编辑文本
- javascript - 如何将 jQuery 添加到 VuePress 文件中
- c# - 如何透视列表
并在不使用 DataTable 的情况下分配给 GridView? - python - This issue about compile keras model
- python - IPython 在第一个换行符后结束缩进块的输入
- java - git忽略Android Studio中的特定java类
- php - 向 Woocommerce 添加具有固定费用的百分比费用
- android - 如何从导航栏中删除后退按钮?
- intellij-idea - Texify IDEA:如何应用自定义代码样式?