Python 的 jsonschema 包是否允许使用数字键?

Does Python's jsonschema package allow for the use of numeric keys?

我正在提取 YAML 文件并使用 JSON 模式对其进行验证。 YAML中有些key是不连续的数字,在YAML中表示为:

1:
    foo: bar

... 在解码为 Python dict.

时又会保留它们的类型

我已经尝试使用 JSON 模式 patternProperty ^\d+$ 验证这一点,但是失败了,因为正则表达式需要一个字符串,并且不执行类型强制。

在我的源 YAML 文件中没有将键用引号引起来,jsonschema 包是否提供了一种方法让我验证数字键?

您加载 YAML 的方式有误。

有多个加载器,除了 BaseLoader 之外的所有加载器实际上都在尝试 通过将它们与模式匹配来解释未引用的标量。然后 是 1 的整数,2018-08-21 22:10:00datetimetrue:

的布尔值
import sys
import ruamel.yaml

yaml_str = """\
1: 
   foo: bar
"""

yaml = ruamel.yaml.YAML(typ='safe')
data = yaml.load(yaml_str)
print(data)

给出:

{1: {'foo': 'bar'}}

但是当将 'safe' 更改为 'base' 时:

yaml = ruamel.yaml.YAML(typ='safe')

你会得到 "string only" 个标量:

{'1': {'foo': 'bar'}}

也可以使用旧语法:

from ruamel import yaml

yaml.load(data, Loader=yaml.BaseLoader)

这也适用于 PyYAML(调整导入后)