如何从TCL写出嵌套键YAML?



我正在寻找如下模板。我尝试了 dict2yaml 它没有给出 YAML 格式,如下所示。 有人可以帮忙吗?

LEVEL_1:
LEVEL_2:
LEVEL_3: some_value

另一个变体是

LEVEL_1:
LEVEL_2:
LEVEL_3:
- some_value1
- some_value2
- some_value3

这里有一个很好的例子,Tcl的类型系统对你没有帮助。 任何具有偶数项的列表都可以被视为字典。

例如:

set nested_dict {key1 {key2 {x y}}}

y是具有三个嵌套键的字典的值,还是{x y}具有两个嵌套键的字典的值?

yaml::dict2yaml函数仅适用于没有嵌套键的简单字典。

一种可能性是将您的嵌套字典转换为"抱团"https://wiki.tcl-lang.org/page/huddle,然后使用yaml::huddle2yaml.

迭代嵌套键并自己处理缩进可能更简单。 这是假设您知道嵌套字典的结构。

set nested_dict {key1 {key2 {x y}}}
dict for {k1 d1} $nested_dict {
puts "$k1:"
dict for {k2 d2} $d1 {
puts "    $k2:"
dict for {k3 val} $d2 {
puts "        $k3: $val"
}
}
}

其中打印出来:

key1:
key2:
x: y

抱团的例子:

package require huddle
package require yaml

set MyHuddle [huddle create]
huddle set MyHuddle LEVEL_1 [huddle create]
huddle set MyHuddle LEVEL_1 LEVEL_2 [huddle create] 
huddle set MyHuddle LEVEL_1 LEVEL_2 LEVEL_3 [huddle list some_value1 some_value2 some_value3]
yaml::huddle2yaml $MyHuddle

其中打印出来:

---
LEVEL_1:
LEVEL_2:
LEVEL_3:
- some_value1
- some_value2
- some_value3

请仔细阅读小型会议手册页。huddle createhuddle setdict createdict set非常相似。 但是,我发现我需要在 LEVEL_1 和 LEVEL2 下显式创建一个抱团,然后才能设置LEVEL_3键的值。

最新更新