yaml中的最大嵌套深度是多少



我正在为配置编写一些yaml模板,它们开始有很多程度的嵌套。

yaml中的最大可能嵌套深度和最大建议嵌套深度是多少?

从YAML 1.2开始,规范对隐式密钥的唯一限制是1024个字符:

foo: bar                                # okay
[ foo ]: bar                            # also okay
<<more-than-1024-characters-here>>: bar # not okay

无论键是标量(第一行(还是集合节点(第二行(,都禁止执行此操作。因此,它实际上限制了隐式键中的嵌套。然而,您可以简单地使用显式密钥:

? foo
: bar
? [ foo ]
: bar
? <<more-than-1024-characters-here>>
: bar

除此之外,您不需要担心嵌套,因为手写文件不太可能达到实现所施加的限制。当然,您可以测试您使用的实现的极限,例如PyYAML:

import yaml, traceback
from yaml.constructor import ConstructorError
for i in range(128, 1024):
open, close = "", ""
for j in range(0, i):
open, close = open + "[", close + "]"
try: yaml.load(open + close)
except:
traceback.print_exc()
print("failed at depth " + str(i))
exit(1)

这会产生(一段时间后(:

[…]
RecursionError: maximum recursion depth exceeded
failed at depth 496

495层的可能深度似乎已经足够了。

在YAML中嵌套没有限制。

但你使用的软件可能会有限制,通常你会遇到内存或CPU限制。我不知道最近有任何库有硬限制,除非你开始遇到由于缩进溢出整数而产生的限制;-(

最新更新