Json 架构验证十进制数

问题描述 投票:0回答:1

以下 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)
python pandas jsonschema json-schema-validator
1个回答
0
投票

您的验证未成功,因为

type:array
定义不正确。您的
scores
数组实例从未经过验证,因为模式只知道根处的
"scores": 1.000
[]

schema = {
    "type": "object",
    "properties": { "scores": {
       "type": "array", "items": {"type": "number", "multipleOf": 0.001 }}}},
}
© www.soinside.com 2019 - 2024. All rights reserved.