如何解决TOML文件添加新行时根级developer键被错误嵌套的问题
问题根因
TOML 的作用域绑定规则非常明确:最近一次声明的表或数组表(包含[[xxx]]语法定义的数组元素),会自动接管后续所有裸写键值对的归属;如果没有新的表头打断,作用域永远不会自动回退到根层级。
你写完第二个[[servers]]块之后,解析上下文已经切换到这个servers数组的第二个元素内部,此时直接书写的developer键,自然会被归类到这个元素对象中,最终出现预期之外的嵌套结果。
修正方案
要让developer字段归属到根层级,最稳妥的做法是把根层级的键值对,挪到所有数组表声明的最开头位置。这个位置是还没有打开任何子表的初始上下文,所有裸写的键都会直接归属根层级,对应的正确TOML写法如下:
developer = "developer_name" [[servers]] ip = "10.0.0.1" role = "frontend" [[servers]] ip = "10.0.0.2" role = "backend"
上述TOML内容解析后,就会得到你期望的JSON结构。
如果你的配置规模较大,不希望把所有根级配置都堆在文档开头,可以给独立的配置块加上显式表头做作用域分隔。比如把开发者信息归类到独立的根级表下:
[[servers]] ip = "10.0.0.1" role = "frontend" [[servers]] ip = "10.0.0.2" role = "backend" [developer] name = "developer_name"
只要显式声明了新的表头,解析上下文就会从之前的servers数组成员中切走,不会再出现键被错误嵌套的问题。
内容的提问来源于stack exchange,提问作者Alaksandar Jesus Gene
相关产品推荐
相关产品推荐

