2

我在反序列化 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这只是一个示例场景,不能在这里发布实际场景。

4

1 回答 1

0

您可以编写自己的 SchemaType 接受任何值但将其反序列化为浮点数或空值。

http://docs.pylonsproject.org/projects/colander/en/latest/extending.html

class MyFloat(colander.Float):

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

我没有对此进行测试,但我希望你能明白这一点。

于 2015-01-14T21:39:51.300 回答