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

2024-04-19 08:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在接收一个YAML文件并用JSON模式验证它。YAML中的一些键是非连续数字,在YAML中表示为:

1:
    foo: bar

。。。当解码成Python dict时,它们又保留了自己的类型。你知道吗

我尝试过使用JSON模式patternProperty^\\d+$来验证这一点,但是失败了,因为regex需要一个字符串,并且不执行类型强制。你知道吗

除了在我的源YAML文件中用引号括起键外,jsonschema包是否提供了一种方法来验证数字键?你知道吗


Tags: 文件字符串jsonyaml类型foo模式bar
1条回答
网友
1楼 · 发布于 2024-04-19 08:38:09

你加载YAML的方式不对。你知道吗

有多个加载器,除了BaseLoader之外,其他所有加载器实际上都在尝试 通过将非引用标量与模式匹配来解释它们。然后呢 是给你一个整数表示1,给你一个datetime表示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'}}

同样有效的是旧语法:

from ruamel import yaml

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

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

相关问题 更多 >