嵌套字典的值类型验证
Validation of nested dictionary's value type
我查看了marshmallow中的python数据,food
字段是一个list,list里面存放的是dict。我只能做到这一步。其实我想验证dict里面的值是int
而不是string
。我应该如何修改我的代码?
from marshmallow import Schema, fields, pprint
class UserSchema(Schema):
name = fields.Str()
food = fields.List(fields.Dict)
user_data = {
"name": "Ken",
"food": [{'apple': 2, 'banana': 4}, {'apple': '2', 'banana': '4'}]
}
result = UserSchema().load(user_data)
pprint(result)
在你的函数中检查这段代码:
print(type(var_name))
尝试像这样遍历并检查每个值类型
DictList = [{'apple': 2, 'banana': 4}, {'apple': '2', 'banana': '4'}]
user_data = {
"name": "Ken",
"food": DictList
}
def verify():
for i in DictList:
for k in i:
if type(i[k]) == int:
return True
return False
if verify():
result = UserSchema().load(user_data)
pprint(result)
下面的代码应该验证您的数据模式。
看代码中的注释,很简单的解释。
from marshmallow import ValidationError, Schema, fields, pprint # Added `ValidationError`.
user_data = {
"name": "Ken",
"food": [
{'apple': 2, 'banana': 4},
{'apple': '2', 'banana': '4'}
]
} # `user_data` is as is without changes.
# New function for validation your dictionary.
def validate_value_type(dict):
for key in dict:
if type(dict[key]) is not int:
raise ValidationError(f'Type of {key}\'s value is not Integer')
# `UserSchema` class with changes.
class UserSchema(Schema):
name = fields.Str()
food = fields.List(fields.Dict(validate=validate_value_type)) # Added validation function.
# Wrapped `load` in `try/catch`.
try:
UserSchema().load(user_data)
except ValidationError as err:
pprint(err.messages)
以上代码输出:
{'food': {1: ["Type of apple's value is not Integer"]}}
我查看了marshmallow中的python数据,food
字段是一个list,list里面存放的是dict。我只能做到这一步。其实我想验证dict里面的值是int
而不是string
。我应该如何修改我的代码?
from marshmallow import Schema, fields, pprint
class UserSchema(Schema):
name = fields.Str()
food = fields.List(fields.Dict)
user_data = {
"name": "Ken",
"food": [{'apple': 2, 'banana': 4}, {'apple': '2', 'banana': '4'}]
}
result = UserSchema().load(user_data)
pprint(result)
在你的函数中检查这段代码:
print(type(var_name))
尝试像这样遍历并检查每个值类型
DictList = [{'apple': 2, 'banana': 4}, {'apple': '2', 'banana': '4'}]
user_data = {
"name": "Ken",
"food": DictList
}
def verify():
for i in DictList:
for k in i:
if type(i[k]) == int:
return True
return False
if verify():
result = UserSchema().load(user_data)
pprint(result)
下面的代码应该验证您的数据模式。
看代码中的注释,很简单的解释。
from marshmallow import ValidationError, Schema, fields, pprint # Added `ValidationError`.
user_data = {
"name": "Ken",
"food": [
{'apple': 2, 'banana': 4},
{'apple': '2', 'banana': '4'}
]
} # `user_data` is as is without changes.
# New function for validation your dictionary.
def validate_value_type(dict):
for key in dict:
if type(dict[key]) is not int:
raise ValidationError(f'Type of {key}\'s value is not Integer')
# `UserSchema` class with changes.
class UserSchema(Schema):
name = fields.Str()
food = fields.List(fields.Dict(validate=validate_value_type)) # Added validation function.
# Wrapped `load` in `try/catch`.
try:
UserSchema().load(user_data)
except ValidationError as err:
pprint(err.messages)
以上代码输出:
{'food': {1: ["Type of apple's value is not Integer"]}}