我有一个小脚本可以自动化YAML文件中的某些内容。
我读取原始的YAML文件并将其转换为哈希值,然后在修改后将dump文件转换为该文件:
File.open(output_file, "w") do |out|
YAML.dump(modified_hash, out)
end
工作正常,但如果不需要,它会删除字符串周围的双引号。这是有效的YAML,但看起来不太好。
我可以在每个字符串的末尾添加一个空格来强制使用单引号,但我对此并不满意。有没有办法在字符串周围强制使用双引号?
答案 0 :(得分:1)
这是@ jomo答案的Ruby版本,供任何人未来参考:
def ensure_quotes(h)
h.each do |k, v|
if v.is_a?(Hash)
ensure_quotes(v)
next
end
h[k] = v + "__ensure_quotes__\n "
end
end
def dump_yaml_with_double_quotes(yaml_file)
yaml = YAML.load_file(yaml_file)
File.open(yaml_file, 'w') do |f|
YAML.dump(ensure_quotes(yaml), f, line_width: -1)
end
`sed -i '' "s/__ensure_quotes__[\\]n //g" #{yaml_file}`
end
从文件加载YAML,以递归方式将魔术引号字符串附加到YAML对象中的所有值,然后将该YAML转储到同一文件,然后使用sed
删除魔术字符串的出现来自输出文件。
答案 1 :(得分:0)
我找到了一个解决方案,这很奇怪,但它确实有用。
要强制单引号,我浏览了哈希并将"foobar "
(注意空格)附加到每个值。使用YAML.dump
后,我再次打开文件并用空字符串替换"foobar "
。
要强制双引号,我发现附加"foo \nbar"
可以完成这项工作。然后,我再打开文件并用空字符串替换"foo \\nbar"
。很奇怪,但有效。
请注意,您可能希望选择比foobar更少使用的东西。