我试图在Python中验证json对象的date属性.

# Define JSON object
json_object = {
    "date": "21ducn23-dsfsd-ds",
    "age": 30
}

# Define JSON schema with date format
json_schema = {
    "type": "object",
    "properties": {
        "date": {"type": "string", "format": "date"},
        "age": {"type": "integer"},
    },
    "required": ["date", "age"],
    }
} 

# Validate JSON object against schema
jsonschema.validate(instance=json_object, schema=json_schema)

但只要日期字段是字符串,验证就成功完成.

我读过几个类似问题的答案,认为格式只是注释. 这documentation条似乎暗示了另一种情况,但我可能错过了一些东西.

在不为Date属性定义正则表达式的情况下,我可以做些什么才能使其正常工作?

我用jsonschema==4.21.1jsonschema-specifications==2023.12.1

推荐答案

从您链接的文档中:

默认情况下,格式只是一种批注,不会影响验证.或者,验证器实现可以提供一个配置选项,以使Format能够充当断言而不仅仅是注释.

在Python中使用jsonschemayou need to hook a format-checking object into the Validator.

所以只要在你的validate电话上加上format_checker=jsonschema.FormatChecker():

from jsonschema import FormatChecker

jsonschema.validate(
    instance=json_object, schema=json_schema, format_checker=FormatChecker()
)

然后会产生一个错误:

jsonschema.exceptions.ValidationError: '21ducn23-dsfsd-ds' is not a 'date'

Failed validating 'format' in schema['properties']['date']:
    {'format': 'date', 'type': 'string'}

On instance['date']:
    '21ducn23-dsfsd-ds'

Python相关问答推荐

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

什么相当于pytorch中的numpy累积ufunc

将图像拖到另一个图像

Pre—Commit MyPy无法禁用非错误消息

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

需要帮助重新调整python fill_between与数据点

Geopandas未返回正确的缓冲区(单位:米)

OpenGL仅渲染第二个三角形,第一个三角形不可见

我对这个简单的异步者的例子有什么错误的理解吗?

如何将一组组合框重置回无 Select tkinter?

在极点中读取、扫描和接收有什么不同?

如何从比较函数生成ngroup?

如何反转一个框架中列的值?

Polars表达式无法访问中间列创建表达式

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

在round函数中使用列值

为什么在不先将包作为模块导入的情况下相对导入不起作用

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

Pandas ,快速从词典栏中提取信息到新栏

对列中的数字进行迭代,得到n次重复开始的第一个行号