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:00
的 datetime
或 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')
你会得到 "string only" 个标量:
{'1': {'foo': 'bar'}}
也可以使用旧语法:
from ruamel import yaml
yaml.load(data, Loader=yaml.BaseLoader)
这也适用于 PyYAML(调整导入后)
我正在提取 YAML 文件并使用 JSON 模式对其进行验证。 YAML中有些key是不连续的数字,在YAML中表示为:
1:
foo: bar
... 在解码为 Python dict
.
我已经尝试使用 JSON 模式 patternProperty
^\d+$
验证这一点,但是失败了,因为正则表达式需要一个字符串,并且不执行类型强制。
在我的源 YAML 文件中没有将键用引号引起来,jsonschema
包是否提供了一种方法让我验证数字键?
您加载 YAML 的方式有误。
有多个加载器,除了 BaseLoader 之外的所有加载器实际上都在尝试
通过将它们与模式匹配来解释未引用的标量。然后
是 1
的整数,2018-08-21 22:10:00
的 datetime
或 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')
你会得到 "string only" 个标量:
{'1': {'foo': 'bar'}}
也可以使用旧语法:
from ruamel import yaml
yaml.load(data, Loader=yaml.BaseLoader)
这也适用于 PyYAML(调整导入后)