我正在使用pydantic将数据从json结构加载到MyModel
示例中(见下面的例子)。有时JSON数据带有MyModel
类中没有定义的额外键。无论如何,我希望在反序列化的MyModel示例中可以访问这些数据。
最小工作示例:
from pydantic import BaseModel
class MyModel(BaseModel):
"""
MyModel has two attributes: foo and bar
"""
foo: str
bar: int
my_json = r'{"foo":"foo value", "bar": 42, "baz": "something else"}'
# my_json has the attributes of MyModel + some extra key/value pair(s): key 'baz' in this case
my_model = MyModel.parse_raw(my_json) # I deserialize it
assert hasattr(my_model, "baz") is True # or something similar
在本例中:是否有办法在反序列化的my_model
示例中找到"baz": "something else"
键值对?
我知道这种行为存在于其他框架中,例如在C#/.NET中为JsonExtensionData
:
...任何没有匹配成员的属性都将在反序列化期间添加到该[annotated]字典中,并在序列化期间写入。
pydantic有类似的东西吗?
1条答案
按热度按时间5t7ly7z51#
是的,这就是model config中
extra
设置的作用,默认设置为ignore
,可以设置为allow
:PS:值得一提的是,没有静态类型检查器能够推断出这个特定的
MyModel
示例具有baz
属性。这意味着没有来自IDE等的my_model.baz
自动建议。但我认为这是显而易见的。