我有一个小脚本来自动化YAML文件中的一些东西.
我读取原始的YAML文件并将其转换为哈希值,然后在修改后将其转换为文件的dump:
File.open(output_file, "w") do |out|
YAML.dump(modified_hash, out)
end
这工作正常,但如果不需要它,它会删除字符串周围的双引号.这是有效的YAML,但看起来不太好.
我可以在每个字符串的末尾添加一个空格来强制单引号,但我对此并不满意.有没有办法在字符串周围强制使用双引号?
最佳答案 这是@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从输出文件中删除出现的魔术字符串.