2024-04-19 08:38:09 发布
网友
我正在接收一个YAML文件并用JSON模式验证它。YAML中的一些键是非连续数字,在YAML中表示为:
1: foo: bar
。。。当解码成Python dict时,它们又保留了自己的类型。你知道吗
dict
我尝试过使用JSON模式patternProperty^\\d+$来验证这一点,但是失败了,因为regex需要一个字符串,并且不执行类型强制。你知道吗
patternProperty
^\\d+$
除了在我的源YAML文件中用引号括起键外,jsonschema包是否提供了一种方法来验证数字键?你知道吗
jsonschema
你加载YAML的方式不对。你知道吗
有多个加载器,除了BaseLoader之外,其他所有加载器实际上都在尝试 通过将非引用标量与模式匹配来解释它们。然后呢 是给你一个整数表示1,给你一个datetime表示2018-08-21 22:10:00,给你一个布尔值表示true:
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'时:
'safe'
'base'
yaml = ruamel.yaml.YAML(typ='safe')
您将得到“仅字符串”标量:
{'1': {'foo': 'bar'}}
同样有效的是旧语法:
from ruamel import yaml yaml.load(data, Loader=yaml.BaseLoader)
这也适用于PyYAML(在调整了导入之后)
你加载YAML的方式不对。你知道吗
有多个加载器,除了BaseLoader之外,其他所有加载器实际上都在尝试 通过将非引用标量与模式匹配来解释它们。然后呢 是给你一个整数表示
1
,给你一个datetime
表示2018-08-21 22:10:00
,给你一个布尔值表示true
:提供:
但是当把
'safe'
改成'base'
时:您将得到“仅字符串”标量:
同样有效的是旧语法:
这也适用于PyYAML(在调整了导入之后)
相关问题 更多 >
编程相关推荐