ruby – 在转储YAML时如何强制使用双引号?

我有一个小脚本来自动化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从输出文件中删除出现的魔术字符串.

点赞