Как десериализовать различные структурированные данные JSON в Marshmallow? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть 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.

Могу ли я и как можно сопоставить Field под Schema с другим путем в целевых данных JSON?


Окружающая среда

  • Python 3.5 и выше
  • Зефир 2.16.3

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете расширить схему и предоставить метод pre_load:

class ContactSchema(Schema):

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