在Ruby中,如何在加载YAML文档时警告哈希中的重复键?

在下面的Ruby示例中,是否有一种模式让YAML无法忽略重复键’one’?

irb(main):001:0> require 'yaml' => true irb(main):002:0> str = '{ one: 1, one: 2 }' => "{ one: 1, one: 2 }" irb(main):003:0> YAML.load(str) => {"one"=>2} 

谢谢!

不需要。你必须决定如何重命名密钥,因为散列键必须是唯一的 – 我会采取一些解决方法,例如手动查找相同的键并在执行YAML::load之前重命名它们。

我做的一件事就是帮助维护我使用的YAML文件,它是编写代码,最初从Ruby中的已知结构生成它。 这让我开始了。

然后,我将编写一个加载它的小片段并输出它使用PrettyPrint或Awesome Print解析的内容,以便我可以将其与文件进行比较。

我还根据需要对字段进行排序,以便于查找重复项。

有一个涉及linter的解决方案,但我不确定它是否与您相关,因为它不是100%Ruby解决方案。 无论如何我会发布它,因为我不知道在Ruby中有什么方法可以做到这一点:

您可以使用yamllint命令行工具:

 sudo pip install yamllint 

具体来说,它有一个检测重复键的规则key-duplicates重复:

 $ cat test.yml { one: 1, one: 2 } $ yamllint test.yml test.yml 1:11 error duplication of key "one" in mapping (key-duplicates)