我正在提取YAML文件,并使用JSON模式对其进行验证。 YAML中的某些键是非连续数字,在YAML中表示为:
1:
foo: bar
...在解码为Python dict
时又保留了其类型。
我尝试使用JSON模式patternProperty
^\\d+$
对此进行验证,但这失败了,因为正则表达式需要一个字符串,并且不执行类型强制。
在我的源YAML文件中将密钥括在引号中的时间很短,jsonschema
软件包提供了一种方法来让我验证数字密钥吗?
答案 0 :(得分:1)
您以错误的方式加载YAML。
有多个加载程序,除了BaseLoader之外,所有加载程序实际上都试图
通过将非标量标量与模式匹配来解释它们。然后
是为您提供1
的整数,还是datetime
的{{1}}或2018-08-21 22:10:00
的布尔值:
true
给予:
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')
也可以使用旧语法:
{'1': {'foo': 'bar'}}
这也将与PyYAML一起使用(在调整导入之后)