【问题标题】:How do I deserialize a different structured JSON data in Marshmallow?如何在 Marshmallow 中反序列化不同的结构化 JSON 数据?
【发布时间】:2018-11-07 19:23:53
【问题描述】:

我有一个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 数据中的不同路径?


环境

  • Python 3.5 及以上版本
  • 棉花糖 2.16.3

【问题讨论】:

    标签: python json deserialization marshmallow


    【解决方案1】:

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

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

    【讨论】:

    • 啊,是啊,看来我还是无法理解preload 的目的。解决方案很简单。谢谢。 :)
    • 你应该阅读the relevant documentation。它有更多用例和示例
    猜你喜欢
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多