用Ruby编写YAML文件:缺少漂亮的打印格式选项
考虑以YAML格式写入/读取文件() 我只是对默认YAML.dump(Ruby 2.2.3)中明显缺少输出格式选项感到惊讶。如果没有任何漂亮的打印选项,YAML.dump看起来真的很难看。我解释: 考虑这个手工编写的YAML配置文件'config/bots.yml',其中有一个项目列表(散列,每个项目都有'token'和'comment'键): 输入文件:用Ruby编写YAML文件:缺少漂亮的打印格式选项,ruby,file,serialization,configuration,yaml,Ruby,File,Serialization,Configuration,Yaml,考虑以YAML格式写入/读取文件() 我只是对默认YAML.dump(Ruby 2.2.3)中明显缺少输出格式选项感到惊讶。如果没有任何漂亮的打印选项,YAML.dump看起来真的很难看。我解释: 考虑这个手工编写的YAML配置文件'config/bots.yml',其中有一个项目列表(散列,每个项目都有'token'和'comment'键): 输入文件: - token: 070743004:yuSJJdB5L354Zq41iGIggSdYGJ1IhVh8XSrA comment: ROS
- token: 070743004:yuSJJdB5L354Zq41iGIggSdYGJ1IhVh8XSrA
comment: ROSPOshop.com
- token: 998001334:zAFo4dBdd3ZZtqKiGdPqkkYGJ1ppVW8pUZ
comment: pagoSALDO.com bot
- token: 184679990:BBBBBBBBBCCCCCCCGIDDDDDDDHHHHHHHHHH
comment: SOLYARISoftware demo bot
- token: 184679990:BBBBBBBBBCCCCCCUUUUUUUUUUHHHHHHHHHH
comment: Another demo bot
- token: 184679990:BBBBBBBBBCCCCCCCGHGGHHGHGHHHHHHHHHH
comment: Yet Another demo bot
无详细说明:仅加载和连续转储脚本,如下所示:
config = YAML.load(File.open('config/bots.yml'))
File.open('config/bots.yml', "w") { |f| f.write(YAML.dump(config)) }
输出文件:
---
- token: 070743004:yuSJJdB5L354Zq41iGIggSdYGJ1IhVh8XSrA
comment: ROSPOshop.com
- token: 998001334:zAFo4dBdd3ZZtqgKiGdPqkkYGJ1ppVW8pUZ
comment: pagoSALDO.com bot
- token: 184679990:BBBBBBBBBCCCCCCCGIDDDDDDDHHHHHHHHHH
comment: SOLYARISoftware demo bot
- token: 184679990:BBBBBBBBBCCCCCCUUUUUUUUUUHHHHHHHHHH
comment: Another demo bot
- token: 184679990:BBBBBBBBBCCCCCCCGHGGHHGHGHHHHHHHHHH
comment: Yet Another demo bot
我很不高兴,因为所有的数组项现在都被折叠了(换行符被删除)。如果项的数量很长和/或每个项的数据结构都是一个变量,那就太糟糕了:一个混乱的读数
问题(1)
有YAML选项吗?为YAML.dump做一些更漂亮的打印吗?
举例来说,是否用空行分隔数组中的每个项目
问题(2)
我发现这本非常有用的教程(“YAML食谱”):
有没有关于解释YAML技巧(数据转换等)的最新更新/官方Ruby文档
问题(3)
任何可能的YAML替代方案?我的意思是可能是读/写YAML的替代gem?顺便说一句,我当然考虑过JSON,但在阅读文本数据时我更喜欢更清晰的YAML格式
已更新
顺便说一句,这里有很多信息/有用的YAML格式提示:
如果您只需要这些,您可以编写自己的精美打印解决方案。例如:
config = YAML.load(File.open('bots.yml'))
puts config.to_yaml.gsub("\n-", "\n\n-")
输出:
---
- token: 070743004:yuSJJdB5L354Zq41iGIggSdYGJ1IhVh8XSrA
comment: ROSPOshop.com
- token: 998001334:zAFo4dBdd3ZZtqKiGdPqkkYGJ1ppVW8pUZ
comment: pagoSALDO.com bot
- token: 184679990:BBBBBBBBBCCCCCCCGIDDDDDDDHHHHHHHHHH
comment: SOLYARISoftware demo bot
- token: 184679990:BBBBBBBBBCCCCCCUUUUUUUUUUHHHHHHHHHH
comment: Another demo bot
- token: 184679990:BBBBBBBBBCCCCCCCGHGGHHGHGHHHHHHHHHH
comment: Yet Another demo bot
smart!你是对的->接受了!我从不抱怨YAML Ruby实现。举个例子,如果我对YAML.load没有错的话,我会丢失注释行,比如---#commentPsych,Ruby实现,wraps,一个用C编写的解析器和发射器。LibyML扫描器会去掉所有空格和注释。净结果:Psych从未看到注释因此,nd无法保存它们。