nee*_*zer 7 ruby string yaml escaping
下列...
require 'yaml'
test = "I'm a b&d string"
File.open('test.yaml', 'w') do |out|
out.write(test.to_yaml)
end
Run Code Online (Sandbox Code Playgroud)
......输出......
--- this is a b&d string
Run Code Online (Sandbox Code Playgroud)
我怎样才能输出它
--- 'this is a b&d string'
Run Code Online (Sandbox Code Playgroud)
???
ram*_*ion 18
如果要在YAML中存储转义字符串,请#inspect
在将其转换为YAML之前将其转义:
irb> require 'yaml'
=> true
irb> str = %{This string's a little complicated, but it "does the job" (man, I hate scare quotes)}
=> "This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)"
irb> puts str
This string's a little complicated, but it "does the job" (man, I hate scare quotes)
=> nil
irb> puts str.inspect
"This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)"
=> nil
irb> puts str.to_yaml
--- This string's a little complicated, but it "does the job" (man, I hate scare quotes)
=> nil
irb> puts str.inspect.to_yaml
--- "\"This string's a little complicated, but it \\\"does the job\\\" (man, I hate scare quotes)\""
=> nil
Run Code Online (Sandbox Code Playgroud)
除非必须,否则YAML不引用字符串.它引用了字符串,如果它们包含了它会在未加引号存储时会丢失的内容 - 例如周围的引号字符或尾随或前导空格:
irb> puts (str + " ").to_yaml
--- "This string's a little complicated, but it \"does the job\" (man, I hate scare quotes) "
=> nil
irb> puts %{"#{str}"}.to_yaml
--- "\"This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)\""
=> nil
irb> puts (" " + str).to_yaml
--- " This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)"
=> nil
Run Code Online (Sandbox Code Playgroud)
但是,作为YAML消费者,是否引用字符串对您来说无关紧要.你永远不应该自己解析YAML文本 - 把它留给库.如果你需要在YAML文件中引用字符串,那对我来说闻起来很糟糕.
你的字符串中是否包含"&"并不重要,YAML会保留字符串:
irb> test = "I'm a b&d string"
=> "I'm a b&d string"
irb> YAML::load(YAML::dump(test))
=> "I'm a b&d string"
irb> YAML::load(YAML::dump(test)) == test
=> true
Run Code Online (Sandbox Code Playgroud)
根据YAML 1.2 规范,JSON 文档是有效的 YAML 文档。
此修订版的主要目标是使 YAML 与 JSON 作为官方子集兼容。
因此,有效的 JSON 字符串就是有效的 YAML 字符串。
require 'json'
'my string'.to_json # => produces a valid YAML string
Run Code Online (Sandbox Code Playgroud)
这对于使用 ERB 语法丰富的 YAML 文件非常有用,但string.to_yaml
在许多情况下这些文件不起作用。
例子:
# openvpn.yml.erb
openvpn:
cert: <%= ENV.fetch('OPENVPN_CERT').to_json %>
key: <%= ENV.fetch('OPENVPN_KEY').to_json %>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18715 次 |
最近记录: |