JSON,列表可能为空-什么类型?

时间:2018-09-03 16:28:32

标签: python json type-hinting

我想指定一个具有prizes属性的对象。这可能是PrizeInfo对象的列表,也可能是空列表。我正在寻找类似于以下代码的架构,除了会返回以下错误:

"MySchema": {
    "properties": {
        "prizes": {
            "type": "List['PrizeInfo', 'null']",
        }
    }
 }

E   TypeError: Too many parameters for typing.List; actual 2, expected 1

我正在使用这些模板来生成Python类。

1 个答案:

答案 0 :(得分:3)

“空”列表没有注释。任何空列表对象都将满足List[...]类型的提示,而不管列表内容的具体内容如何。

因此,如果允许使用空列表,请使用

List['PrizeInfo']

这允许包含0个或多个元素的任何列表,因此该提示中包含空列表。

如果您是说None对象旁边允许使用null值(JSON中的PrizeInfo),请使用Union[...] annotationNone

List[Union['PrizeInfo', None]]

如果您想说允许使用NonePrizeInfo对象列表(以JSON术语,null或数组),请使用

Union[List['PrizeInfo'], None]

您也可以使用Optional[...]

Optional[List['PrizeInfo']]

表示同一件事。但是,我不会在List[...]提示中使用它。看起来就像是您在说元素的类型可能是可选的,导致类型说明混乱。