以下 Python 脚本必须验证记录中的小数位数。在模式中,我尝试使用“multipleOf”:0.001 来定义它有 3 个小数位。 我有一条小数点后 5 位的记录: "scores": [1.12345] 它应该报告一个错误,但它正在返回:
Validation ok
scores
0 1.12345
我该如何解决这个问题?
import jsonschema
import pandas as pd
schema = {
"type": "array",
"properties": {"scores": {"type": "number", "multipleOf": 0.001}},
}
df = pd.DataFrame(
{
"scores": [1.12345],
}
)
validator = jsonschema.Draft202012Validator(schema)
try:
validator.validate(instance=df.to_dict("records"))
print("Validation ok")
except jsonschema.ValidationError as e:
print(f"Validation error: {e.message}")
print(df)
您的验证未成功,因为
type:array
定义不正确。您的 scores
数组实例从未经过验证,因为模式只知道根处的 "scores": 1.000
或 []
。
schema = {
"type": "object",
"properties": { "scores": {
"type": "array", "items": {"type": "number", "multipleOf": 0.001 }}}},
}