防止在Ruby中将字符串转换为八进制数

假设我们有以下
ruby代码

require 'yaml'

h={"key"=>[{"step1"=>["0910","1223"]}]}
puts h.to_yaml

“0910”是一个字符串
但是在to_yaml转换之后,字符串变成八进制数.

---
key:
- step1:
  - 0910
  - '1223'

问题是我无法改变h变量.我从外面收到它,我需要在不改变的情况下解决问题.

最佳答案 根据YAML
spec数字前缀为0信号和八进制基数(如Ruby中所示).但是08不是有效的八进制数,所以它不会被引用.

当您从YAML文件加载此数据时,数据将完全按照您的需要显示.

0> h={"key"=>[{"step1"=>["0910","1223"]}]}
=> {"key"=>[{"step1"=>["0910", "1223"]}]}

0> yaml_h = h.to_yaml
=> "---\nkey:\n- step1:\n  - 0910\n  - '1223'\n"

0> YAML.load(yaml_h)
=> {"key"=>[{"step1"=>["0910", "1223"]}]}

如果您无法在此状态下使用数据,那么您可以扩展问题并提供更多详细信息.

点赞