使用Python/Marshmallow验证变量字段名的嵌套字典
给出这个例子...
{
"A-B": {
"x": {
"name": "x A-B"
},
"y": {
"level": 6
}
},
"B-C": {
"x": {
"name": "x B-C"
},
"y": {
"level": 9
}
},
"A-C": {
"x": {
"name": "x A-C"
}
}
}
在这里,“A”、“B”和“C”是状态,而“x”和“y”是不同的字典。“x”可以有一个“name”键,值是字符串;而“y”可以有一个“level”键,值是整数。
这两个“x”和“y”都是可选的。
我已经为“x”和“y”创建了模式...
def X_Schema( Schema ):
name = fields.String( required = True )
def Y_Schema( Schema ):
level = fields.Integer( required = True )
我知道我需要使用一些嵌套结构,但我搞不清楚当最上层的“key”不是固定的情况下,这该怎么实现。也就是说,它可以是“A-B”、“A-C”、“B-C”等等。“x”和“y”在一个最上层的值中只能出现一次,两个都是可选的。
我想做类似这样的事情...
def StateSchema( Schema ):
???? = fields.Dict( keys = < "x" or "y" >, values = <X_Schema or Y_Schema> )
就我个人而言,我觉得用marshmallow实现这个是不可能的。我无法控制这个输入,所以如果不能用marshmallow来验证,我就基本上无能为力了。
我已经做到这一步了...
class StateSchema( Schema )
a_b = fields.Dict( keys = fields.String(), values = fields.Nested( X_Schema() ), required = False, data_key = "A-B" )
b_c = fields.Dict( keys = fields.String(), values = fields.Nested( X_Schema() ), required = False, data_key = "B-C" )
但我觉得这不是最优的,因为我需要为所有可能的状态创建字段.... :(
0 个回答
暂无回答