Marshmallow - 将 None 字符串转为空字符串

Marshmallow - turn None string to empty string

我收到一封电子邮件正文,其中一些字符串是 None 而不是 ""

我试过使用 missing、default、allow_none 和我在网上找到的其他 hack,但没有任何效果。

我想在我的架构中将 None 变为 ""。我认为一个简单的 email = fields.String(missing = "") 会起作用,但我想 None 不算丢失。

架构:

class CustomerSchema(Schema):
    @post_dump
    def change_none_to_string(self, data, **kwargs):
        for field in data:
            if data[field] is None:
                data[field] = ""
        return data

    firstname = fields.String(missing = "")
    lastname = fields.String(missing = "")
    email = fields.String(missing = "")

您可以使用 post-转储或预加载函数在处理之前更改输入或输出中的内容,例如添加:

@post_dump
def change_none_to_string(self, data, **kwargs)
    for field in data:
        if data[field] is None:
            data[field] = ""
    return data

您的模式应该意味着您的输出将所有 None 字段替换为“”,并且您可以对输入进行预加载来做类似的事情。

假设您输入的是 json 中的原始文本(可能不是,我还没有看到您的输入),这应该可以完成工作,但这取决于您输入的格式:

@pre_dump
def change_none_to_string_input(self, data, **kwargs):
    for field in data:
        data[field] = data[field].replace("null", '""')
    return data

查看 https://marshmallow.readthedocs.io/en/stable/extending.html 了解更多详细信息。