如何在 Marshmallow 中反序列化不同的结构化 JSON 数据?

How do I deserialize a different structured JSON data in Marshmallow?

我有一个 Schema 如下:

from marshmallow import Schema, fields

class ContactSchema(Schema):
    # ... other fields ...
    phone = fields.Str()
    # ... other fields ...

但是,JSON我处理的数据不一样:

{
    // ... other data ...
    "information": {
        "address": "foo",
        "email": "bar@baz.com",
        "phone": "+101234567890"
    }
    // .. other data ..
}

如您所见,phone键位于information下方,这与ContactSchema的形成方式不同。

我能否以及如何将 Schema 下的 Field 映射到目标 JSON 数据中的不同路径?


环境

您可以扩展架构并提供 pre_load 方法:

class ContactSchema(Schema):

    @preload
    def extract_information(self, data):
       # Please check for None's
       data['phone'] = data['information'].pop('phone')
       return data