我在反序列化JSON响应时使用漏勺。 有一个字段配置为仅包含数字,但有时响应对此字段具有null或非数字值,然后我的应用程序引发无效错误。 有没有一种方法可以在我的程序中处理它,以将默认值(例如NA)提供给该字段。 这是一个说明情况的示例:

这是一个示例:

class SampleClass(colander.MappingSchema):
    name = colander.SchemaNode(colander.String())
    testMark  = colander.SchemaNode(colander.Float(), missing=None)


class Sample(colander.MappingSchema):
    type = colander.SchemaNode(colander.String())
    student = colander.SampleStudent()

I want the following JSON to be accepted and not throw error for testMark as null

{  
   "type":"test",
   "student":{  
      "name":"a name",
      "testMark":null
   }
}

如果代码有问题,我深表歉意,这是我第一次使用python。 希望我已经阐明了这一情况。 每当测试标记不是数字时,我想给testMark字段一个默认值,例如NA。

PS这只是一个示例方案,不能在此处发布实际方案。

#1楼 票数:0

您可以编写自己的SchemaType来接受任何值,但是将其反序列化为float或null。

http://docs.pylonsproject.org/projects/colander/zh-CN/latest/extending.html

class MyFloat(colander.Float):

    def deserialize(self, node, cstruct):
        if isinstance(cstruct, float):
            return cstruct
        else:
            return null

我没有对此进行测试,但希望您能理解。

  ask by RohitS translate from so

未解决问题?本站智能推荐:

1回复

禁止未知值?

如果有效负载中的值不在架构中,我可以用漏勺引发错误吗? 因此,只允许列入白名单的字段吗? 这是一个示例:
1回复

在Deform表单描述字段中允许原始HTML

在渲染时,如何阻止Deform在字段标题或描述中转义HTML? 我目前最好的解决方案是使用我需要的内容搜索/替换返回的呈现HTML字符串。 默认情况下,变形会将所有HTML字符转义为HTML实体,我想在其中一个字段描述中添加标记。
1回复

Python Colander库失败,异常'createdon':u'Invalid date'当createdon字段包含值datetime.datetime.now()时

我正在使用python的漏勺库进行验证。 在我的代码中有一个colander.DateTime()类型的createdon字段。 当我为它提供datetime.datetime.now()的值时,它会失败,例外情况说createdon字段的日期无效。 可能是什么问题? 这是pytho
1回复

使用漏勺验证可选值

我正在使用滤锅来验证 Pyramid Web 服务器的请求参数。 例如: 这里, first_name和last_name是必需参数。 如果我使用missing=''那么这将使它们成为可选,但它们仍会作为空字符串添加到反序列化中,如果用户提交空字符串,这并不是真正有用的。 我能想到的最好的是m
3回复

用于映射的漏勺模式,其中键是可变的但值是数组

如何在漏勺中为以下形式的JSON定义模式? 'data'中的键可以是任何字符串,值是数组。 目前,我有以下内容,但它并没有对映射可以具有的值类型进行任何限制。 描述这个的正确方法是什么?
1回复

如何在变形/库兰德中使用错误消息进行简单值检查

我在Deform / Colander中实现了一个简单的“同意条款和条件框”。 因此,我只想检查该复选框是否已选中,并显示一条错误消息“您必须同意条款与条件”。 我了解我可以使用: 确保选中该框。 但是,OneOf不允许自定义错误消息。 正确的方法是什么?
4回复

允许在python脚本中处理可能的未知文件名

我正在使用一个脚本,它将输入的pdf覆盖到另一个本质上是信头的pdf上。 但是,我不确定如何允许该过程自动化以允许一次处理多个文件,而无需事先知道该文件的名称。 我正在使用python 2.7。
3回复

子类int允许“未知”值

我有点被困在这里。 我基本上是在试验阶段,我想知道我是否可以继承int ,这样它将完全像你的旧的int ,除了你将能够分配一个“未知”值,在算术运算的情况下,它将采取行动为1。 所以我可以说: 实际上,它与float('inf')工作方式类似,只是我只需要整数加上单个“特殊”值。