如何将包含换行符的字符串转换为多行yaml

时间:2013-08-17 01:25:45

标签: ruby yaml

我有一个类似于以下内容的字符串:

test_string = "This is a multiple line string \n  
containing new line characters. \n  
Another new line."

我正在尝试使用to_yaml函数将其转换为多行yaml字符串,但它会自动转义新行字符。

test_string.to_yaml

输出:

=> "--- ! This is a multiple line string \\ncontaining new line characters.
 \\nAnother new line."

如何创建包含"\n"的字符串并将其解析为yaml?

编辑: 事实证明,如果在“\ n”之前放置一个空格,to_yaml函数将转义新行。以下字符串解决了问题:

test_string = "This is a multiple line string\n 
containing new line characters.\n 
Another new line."

2 个答案:

答案 0 :(得分:2)

YAML将空行(两个连续换行符)视为等于\ n。 来自http://yaml.org/spec/history/2001-08-01.html

有同样的问题,终于找到解决方案: s.replaceAll(“\ n”,“ \ n \ n ”);

答案 1 :(得分:0)

这个字符串来自哪里?如果那是真正的Ruby代码,那么字符串将包含成对的换行符,而不是两个字符\n

内部双引号\n被转换为单个换行符,因此与行末尾的换行符一起,每行后将有两个换行符。但是to_yaml会看到一个反斜杠(它会以第二个反斜杠转义),然后是n,它会逐字传递。

在YAML中没有一种表示字符串的独特方式。 String#to_yaml(或YAML.dump)生成字符串数据的单引号流样式,除非数据包含必须用双引号表示的字符。换行符由YAML数据中的空行表示。

这个简短的节目演示了。

require 'yaml'

puts "aa\nbb\n".to_yaml

<强>输出

--- ! 'aa

  bb

'